{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Metal Furnace Grade Classification"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Import Packages"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "# Preprocessing\n",
    "from sklearn.metrics import log_loss\n",
    "from sklearn.preprocessing import LabelEncoder, MinMaxScaler\n",
    "from sklearn.model_selection import train_test_split, cross_val_score\n",
    "\n",
    "# Classification\n",
    "from sklearn.svm import SVC\n",
    "from sklearn.naive_bayes import GaussianNB\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.tree import DecisionTreeClassifier, ExtraTreeClassifier\n",
    "from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier, BaggingClassifier, ExtraTreesClassifier, GradientBoostingClassifier\n",
    "\n",
    "import xgboost as xgb\n",
    "import lightgbm as lgb\n",
    "import catboost as cat\n",
    "\n",
    "# Oversampling\n",
    "from imblearn.over_sampling import SMOTE\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "%matplotlib inline\n",
    "\n",
    "import warnings\n",
    "warnings.simplefilter('ignore')\n",
    "\n",
    "pd.options.display.max_columns = 30"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Import Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_data(path):\n",
    "    train = pd.read_csv(os.path.join(path, \"train.csv\"))\n",
    "    test = pd.read_csv(os.path.join(path, \"test.csv\"))\n",
    "    \n",
    "    print(\"Train Shape : {}\\nTest Shape : {}\".format(train.shape, test.shape))\n",
    "    \n",
    "    return train, test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train Shape : (620, 29)\n",
      "Test Shape : (266, 28)\n"
     ]
    }
   ],
   "source": [
    "path = \"../data/\"\n",
    "\n",
    "train, test = get_data(path)\n",
    "\n",
    "target = 'grade'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>f0</th>\n",
       "      <th>f1</th>\n",
       "      <th>f2</th>\n",
       "      <th>f3</th>\n",
       "      <th>f4</th>\n",
       "      <th>f5</th>\n",
       "      <th>f6</th>\n",
       "      <th>f7</th>\n",
       "      <th>f8</th>\n",
       "      <th>f9</th>\n",
       "      <th>f10</th>\n",
       "      <th>f11</th>\n",
       "      <th>f12</th>\n",
       "      <th>f13</th>\n",
       "      <th>f14</th>\n",
       "      <th>f15</th>\n",
       "      <th>f16</th>\n",
       "      <th>f17</th>\n",
       "      <th>f18</th>\n",
       "      <th>f19</th>\n",
       "      <th>f20</th>\n",
       "      <th>f21</th>\n",
       "      <th>f22</th>\n",
       "      <th>f23</th>\n",
       "      <th>f24</th>\n",
       "      <th>f25</th>\n",
       "      <th>f26</th>\n",
       "      <th>f27</th>\n",
       "      <th>grade</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.848564</td>\n",
       "      <td>-0.26425</td>\n",
       "      <td>-0.461423</td>\n",
       "      <td>0.409400</td>\n",
       "      <td>1.305455</td>\n",
       "      <td>2.329398</td>\n",
       "      <td>0.370965</td>\n",
       "      <td>0.090167</td>\n",
       "      <td>0.107958</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.395874</td>\n",
       "      <td>0.308879</td>\n",
       "      <td>0.548623</td>\n",
       "      <td>0.472101</td>\n",
       "      <td>0.172917</td>\n",
       "      <td>0.098853</td>\n",
       "      <td>0.308879</td>\n",
       "      <td>0.040193</td>\n",
       "      <td>0.182574</td>\n",
       "      <td>0.085505</td>\n",
       "      <td>0.233285</td>\n",
       "      <td>-1.080663</td>\n",
       "      <td>0.443257</td>\n",
       "      <td>-0.406121</td>\n",
       "      <td>-0.687687</td>\n",
       "      <td>0.271886</td>\n",
       "      <td>3.727218</td>\n",
       "      <td>0.102129</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.825098</td>\n",
       "      <td>-0.26425</td>\n",
       "      <td>3.032397</td>\n",
       "      <td>-2.442599</td>\n",
       "      <td>1.305455</td>\n",
       "      <td>-0.276144</td>\n",
       "      <td>0.370965</td>\n",
       "      <td>0.090167</td>\n",
       "      <td>0.107958</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.395874</td>\n",
       "      <td>0.308879</td>\n",
       "      <td>0.548623</td>\n",
       "      <td>0.472101</td>\n",
       "      <td>0.172917</td>\n",
       "      <td>0.098853</td>\n",
       "      <td>0.308879</td>\n",
       "      <td>0.040193</td>\n",
       "      <td>0.182574</td>\n",
       "      <td>0.085505</td>\n",
       "      <td>0.233285</td>\n",
       "      <td>-1.080663</td>\n",
       "      <td>-0.232546</td>\n",
       "      <td>-0.406366</td>\n",
       "      <td>-0.687687</td>\n",
       "      <td>0.271886</td>\n",
       "      <td>-0.232472</td>\n",
       "      <td>0.102129</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         f0       f1        f2        f3        f4        f5        f6  \\\n",
       "0  1.848564 -0.26425 -0.461423  0.409400  1.305455  2.329398  0.370965   \n",
       "1 -0.825098 -0.26425  3.032397 -2.442599  1.305455 -0.276144  0.370965   \n",
       "\n",
       "         f7        f8   f9       f10       f11       f12       f13       f14  \\\n",
       "0  0.090167  0.107958  0.0  0.395874  0.308879  0.548623  0.472101  0.172917   \n",
       "1  0.090167  0.107958  0.0  0.395874  0.308879  0.548623  0.472101  0.172917   \n",
       "\n",
       "        f15       f16       f17       f18       f19       f20       f21  \\\n",
       "0  0.098853  0.308879  0.040193  0.182574  0.085505  0.233285 -1.080663   \n",
       "1  0.098853  0.308879  0.040193  0.182574  0.085505  0.233285 -1.080663   \n",
       "\n",
       "        f22       f23       f24       f25       f26       f27  grade  \n",
       "0  0.443257 -0.406121 -0.687687  0.271886  3.727218  0.102129      2  \n",
       "1 -0.232546 -0.406366 -0.687687  0.271886 -0.232472  0.102129      4  "
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>f0</th>\n",
       "      <th>f1</th>\n",
       "      <th>f2</th>\n",
       "      <th>f3</th>\n",
       "      <th>f4</th>\n",
       "      <th>f5</th>\n",
       "      <th>f6</th>\n",
       "      <th>f7</th>\n",
       "      <th>f8</th>\n",
       "      <th>f9</th>\n",
       "      <th>f10</th>\n",
       "      <th>f11</th>\n",
       "      <th>f12</th>\n",
       "      <th>f13</th>\n",
       "      <th>f14</th>\n",
       "      <th>f15</th>\n",
       "      <th>f16</th>\n",
       "      <th>f17</th>\n",
       "      <th>f18</th>\n",
       "      <th>f19</th>\n",
       "      <th>f20</th>\n",
       "      <th>f21</th>\n",
       "      <th>f22</th>\n",
       "      <th>f23</th>\n",
       "      <th>f24</th>\n",
       "      <th>f25</th>\n",
       "      <th>f26</th>\n",
       "      <th>f27</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.837812</td>\n",
       "      <td>-0.273636</td>\n",
       "      <td>1.276580</td>\n",
       "      <td>0.463262</td>\n",
       "      <td>-0.585142</td>\n",
       "      <td>-0.24287</td>\n",
       "      <td>0.349804</td>\n",
       "      <td>0.12356</td>\n",
       "      <td>0.166795</td>\n",
       "      <td>0.06143</td>\n",
       "      <td>0.445195</td>\n",
       "      <td>0.27735</td>\n",
       "      <td>-2.139737</td>\n",
       "      <td>-2.527625</td>\n",
       "      <td>0.17609</td>\n",
       "      <td>0.06143</td>\n",
       "      <td>0.285133</td>\n",
       "      <td>0.06143</td>\n",
       "      <td>0.197642</td>\n",
       "      <td>0.06143</td>\n",
       "      <td>0.27735</td>\n",
       "      <td>0.886135</td>\n",
       "      <td>-0.568935</td>\n",
       "      <td>1.100428</td>\n",
       "      <td>-0.244589</td>\n",
       "      <td>0.229718</td>\n",
       "      <td>-0.217109</td>\n",
       "      <td>0.087039</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.078087</td>\n",
       "      <td>-0.273636</td>\n",
       "      <td>-0.496119</td>\n",
       "      <td>0.463262</td>\n",
       "      <td>-2.438092</td>\n",
       "      <td>-0.24287</td>\n",
       "      <td>0.349804</td>\n",
       "      <td>0.12356</td>\n",
       "      <td>0.166795</td>\n",
       "      <td>0.06143</td>\n",
       "      <td>0.445195</td>\n",
       "      <td>0.27735</td>\n",
       "      <td>0.513736</td>\n",
       "      <td>0.395628</td>\n",
       "      <td>0.17609</td>\n",
       "      <td>0.06143</td>\n",
       "      <td>0.285133</td>\n",
       "      <td>0.06143</td>\n",
       "      <td>-5.059644</td>\n",
       "      <td>0.06143</td>\n",
       "      <td>0.27735</td>\n",
       "      <td>0.886135</td>\n",
       "      <td>0.504299</td>\n",
       "      <td>-0.434268</td>\n",
       "      <td>-0.244040</td>\n",
       "      <td>0.229718</td>\n",
       "      <td>-0.217109</td>\n",
       "      <td>0.087039</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         f0        f1        f2        f3        f4       f5        f6  \\\n",
       "0 -0.837812 -0.273636  1.276580  0.463262 -0.585142 -0.24287  0.349804   \n",
       "1  2.078087 -0.273636 -0.496119  0.463262 -2.438092 -0.24287  0.349804   \n",
       "\n",
       "        f7        f8       f9       f10      f11       f12       f13      f14  \\\n",
       "0  0.12356  0.166795  0.06143  0.445195  0.27735 -2.139737 -2.527625  0.17609   \n",
       "1  0.12356  0.166795  0.06143  0.445195  0.27735  0.513736  0.395628  0.17609   \n",
       "\n",
       "       f15       f16      f17       f18      f19      f20       f21       f22  \\\n",
       "0  0.06143  0.285133  0.06143  0.197642  0.06143  0.27735  0.886135 -0.568935   \n",
       "1  0.06143  0.285133  0.06143 -5.059644  0.06143  0.27735  0.886135  0.504299   \n",
       "\n",
       "        f23       f24       f25       f26       f27  \n",
       "0  1.100428 -0.244589  0.229718 -0.217109  0.087039  \n",
       "1 -0.434268 -0.244040  0.229718 -0.217109  0.087039  "
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.head(2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Target distribution"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(12, 5))\n",
    "sns.countplot(train[target])\n",
    "plt.title(\"Target Distribution\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Checking Number of Unique Values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "f0        8\n",
       "f1       10\n",
       "f2        7\n",
       "f3        2\n",
       "f4        3\n",
       "f5        8\n",
       "f6        2\n",
       "f7        2\n",
       "f8        3\n",
       "f9        1\n",
       "f10       2\n",
       "f11       2\n",
       "f12       3\n",
       "f13       2\n",
       "f14       2\n",
       "f15       2\n",
       "f16       2\n",
       "f17       2\n",
       "f18       2\n",
       "f19       4\n",
       "f20       2\n",
       "f21       2\n",
       "f22      49\n",
       "f23      63\n",
       "f24      24\n",
       "f25       3\n",
       "f26       3\n",
       "f27       3\n",
       "grade     5\n",
       "dtype: int64"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.nunique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "f0      8\n",
       "f1      7\n",
       "f2      6\n",
       "f3      2\n",
       "f4      3\n",
       "f5      6\n",
       "f6      2\n",
       "f7      2\n",
       "f8      3\n",
       "f9      2\n",
       "f10     2\n",
       "f11     2\n",
       "f12     3\n",
       "f13     2\n",
       "f14     2\n",
       "f15     2\n",
       "f16     2\n",
       "f17     2\n",
       "f18     2\n",
       "f19     2\n",
       "f20     2\n",
       "f21     2\n",
       "f22    37\n",
       "f23    41\n",
       "f24    14\n",
       "f25     3\n",
       "f26     3\n",
       "f27     2\n",
       "dtype: int64"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.nunique()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that most of the features have very less number of unique values, so they might be of categorical nature.\n",
    "\n",
    "Let's see if they re common in test set."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of elements which are in test and not in train : \n",
      "f0 -->\t 8\n",
      "----------\n",
      "f1 -->\t 7\n",
      "----------\n",
      "f2 -->\t 6\n",
      "----------\n",
      "f3 -->\t 2\n",
      "----------\n",
      "f4 -->\t 3\n",
      "----------\n",
      "f5 -->\t 6\n",
      "----------\n",
      "f6 -->\t 2\n",
      "----------\n",
      "f7 -->\t 2\n",
      "----------\n",
      "f8 -->\t 3\n",
      "----------\n",
      "f9 -->\t 2\n",
      "----------\n",
      "f10 -->\t 2\n",
      "----------\n",
      "f11 -->\t 2\n",
      "----------\n",
      "f12 -->\t 3\n",
      "----------\n",
      "f13 -->\t 2\n",
      "----------\n",
      "f14 -->\t 2\n",
      "----------\n",
      "f15 -->\t 2\n",
      "----------\n",
      "f16 -->\t 2\n",
      "----------\n",
      "f17 -->\t 2\n",
      "----------\n",
      "f18 -->\t 2\n",
      "----------\n",
      "f19 -->\t 2\n",
      "----------\n",
      "f20 -->\t 2\n",
      "----------\n",
      "f21 -->\t 2\n",
      "----------\n",
      "f22 -->\t 37\n",
      "----------\n",
      "f23 -->\t 41\n",
      "----------\n",
      "f24 -->\t 14\n",
      "----------\n",
      "f25 -->\t 3\n",
      "----------\n",
      "f26 -->\t 3\n",
      "----------\n",
      "f27 -->\t 2\n",
      "----------\n"
     ]
    }
   ],
   "source": [
    "print(\"Number of elements which are in test and not in train : \")\n",
    "for col in train.columns.tolist():\n",
    "    if col != target:\n",
    "        print(\"{} -->\\t {}\".format(col, len(set(test[col].unique()) - set(train[col].unique()))))\n",
    "        print(\"--\"*5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Seems there is very low common values between train and test.\n",
    "\n",
    "Let's check the distribution of train and test features."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>f0</th>\n",
       "      <th>f1</th>\n",
       "      <th>f2</th>\n",
       "      <th>f3</th>\n",
       "      <th>f4</th>\n",
       "      <th>f5</th>\n",
       "      <th>f6</th>\n",
       "      <th>f7</th>\n",
       "      <th>f8</th>\n",
       "      <th>f9</th>\n",
       "      <th>f10</th>\n",
       "      <th>f11</th>\n",
       "      <th>f12</th>\n",
       "      <th>f13</th>\n",
       "      <th>f14</th>\n",
       "      <th>f15</th>\n",
       "      <th>f16</th>\n",
       "      <th>f17</th>\n",
       "      <th>f18</th>\n",
       "      <th>f19</th>\n",
       "      <th>f20</th>\n",
       "      <th>f21</th>\n",
       "      <th>f22</th>\n",
       "      <th>f23</th>\n",
       "      <th>f24</th>\n",
       "      <th>f25</th>\n",
       "      <th>f26</th>\n",
       "      <th>f27</th>\n",
       "      <th>grade</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>620.0</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>6.200000e+02</td>\n",
       "      <td>620.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>-1.344802e-16</td>\n",
       "      <td>6.596874e-16</td>\n",
       "      <td>3.697759e-17</td>\n",
       "      <td>6.503758e-16</td>\n",
       "      <td>-9.454803e-17</td>\n",
       "      <td>1.146037e-16</td>\n",
       "      <td>1.577591e-16</td>\n",
       "      <td>-2.734820e-16</td>\n",
       "      <td>6.083843e-17</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.494420e-16</td>\n",
       "      <td>-2.829278e-16</td>\n",
       "      <td>-8.899691e-17</td>\n",
       "      <td>-1.197966e-16</td>\n",
       "      <td>-2.104052e-17</td>\n",
       "      <td>-8.366963e-17</td>\n",
       "      <td>-2.652000e-16</td>\n",
       "      <td>-3.377674e-16</td>\n",
       "      <td>-3.220542e-16</td>\n",
       "      <td>1.148947e-15</td>\n",
       "      <td>1.893647e-16</td>\n",
       "      <td>-1.633102e-16</td>\n",
       "      <td>-9.383175e-17</td>\n",
       "      <td>-4.297638e-18</td>\n",
       "      <td>2.087936e-16</td>\n",
       "      <td>-2.721837e-17</td>\n",
       "      <td>-2.615291e-16</td>\n",
       "      <td>-1.763822e-17</td>\n",
       "      <td>2.033871</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>1.000807e+00</td>\n",
       "      <td>0.630779</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-8.250977e-01</td>\n",
       "      <td>-2.642501e-01</td>\n",
       "      <td>-4.614228e-01</td>\n",
       "      <td>-2.442599e+00</td>\n",
       "      <td>-2.356907e+00</td>\n",
       "      <td>-2.761441e-01</td>\n",
       "      <td>-2.695676e+00</td>\n",
       "      <td>-1.109054e+01</td>\n",
       "      <td>-1.327888e+01</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-2.526055e+00</td>\n",
       "      <td>-3.237512e+00</td>\n",
       "      <td>-1.999287e+00</td>\n",
       "      <td>-2.118189e+00</td>\n",
       "      <td>-5.783117e+00</td>\n",
       "      <td>-1.011599e+01</td>\n",
       "      <td>-3.237512e+00</td>\n",
       "      <td>-2.487971e+01</td>\n",
       "      <td>-5.477226e+00</td>\n",
       "      <td>-1.316779e+01</td>\n",
       "      <td>-4.286607e+00</td>\n",
       "      <td>-1.080663e+00</td>\n",
       "      <td>-1.079838e+00</td>\n",
       "      <td>-1.899472e+00</td>\n",
       "      <td>-6.876869e-01</td>\n",
       "      <td>-4.914855e+00</td>\n",
       "      <td>-2.324721e-01</td>\n",
       "      <td>-1.572780e+01</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-8.250977e-01</td>\n",
       "      <td>-2.642501e-01</td>\n",
       "      <td>-4.614228e-01</td>\n",
       "      <td>4.093999e-01</td>\n",
       "      <td>-5.257260e-01</td>\n",
       "      <td>-2.761441e-01</td>\n",
       "      <td>3.709645e-01</td>\n",
       "      <td>9.016696e-02</td>\n",
       "      <td>1.079584e-01</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3.958742e-01</td>\n",
       "      <td>3.088792e-01</td>\n",
       "      <td>5.486225e-01</td>\n",
       "      <td>4.721013e-01</td>\n",
       "      <td>1.729171e-01</td>\n",
       "      <td>9.885336e-02</td>\n",
       "      <td>3.088792e-01</td>\n",
       "      <td>4.019339e-02</td>\n",
       "      <td>1.825742e-01</td>\n",
       "      <td>8.550514e-02</td>\n",
       "      <td>2.332847e-01</td>\n",
       "      <td>-1.080663e+00</td>\n",
       "      <td>-6.838333e-01</td>\n",
       "      <td>-4.063661e-01</td>\n",
       "      <td>-6.876869e-01</td>\n",
       "      <td>2.718856e-01</td>\n",
       "      <td>-2.324721e-01</td>\n",
       "      <td>1.021286e-01</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>-3.794874e-01</td>\n",
       "      <td>-2.642501e-01</td>\n",
       "      <td>-4.614228e-01</td>\n",
       "      <td>4.093999e-01</td>\n",
       "      <td>-5.257260e-01</td>\n",
       "      <td>-2.761441e-01</td>\n",
       "      <td>3.709645e-01</td>\n",
       "      <td>9.016696e-02</td>\n",
       "      <td>1.079584e-01</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3.958742e-01</td>\n",
       "      <td>3.088792e-01</td>\n",
       "      <td>5.486225e-01</td>\n",
       "      <td>4.721013e-01</td>\n",
       "      <td>1.729171e-01</td>\n",
       "      <td>9.885336e-02</td>\n",
       "      <td>3.088792e-01</td>\n",
       "      <td>4.019339e-02</td>\n",
       "      <td>1.825742e-01</td>\n",
       "      <td>8.550514e-02</td>\n",
       "      <td>2.332847e-01</td>\n",
       "      <td>9.253580e-01</td>\n",
       "      <td>-4.593178e-01</td>\n",
       "      <td>-4.061213e-01</td>\n",
       "      <td>-3.659525e-01</td>\n",
       "      <td>2.718856e-01</td>\n",
       "      <td>-2.324721e-01</td>\n",
       "      <td>1.021286e-01</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>5.117331e-01</td>\n",
       "      <td>-2.642501e-01</td>\n",
       "      <td>-4.614228e-01</td>\n",
       "      <td>4.093999e-01</td>\n",
       "      <td>1.305455e+00</td>\n",
       "      <td>-2.761441e-01</td>\n",
       "      <td>3.709645e-01</td>\n",
       "      <td>9.016696e-02</td>\n",
       "      <td>1.079584e-01</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3.958742e-01</td>\n",
       "      <td>3.088792e-01</td>\n",
       "      <td>5.486225e-01</td>\n",
       "      <td>4.721013e-01</td>\n",
       "      <td>1.729171e-01</td>\n",
       "      <td>9.885336e-02</td>\n",
       "      <td>3.088792e-01</td>\n",
       "      <td>4.019339e-02</td>\n",
       "      <td>1.825742e-01</td>\n",
       "      <td>8.550514e-02</td>\n",
       "      <td>2.332847e-01</td>\n",
       "      <td>9.253580e-01</td>\n",
       "      <td>4.432571e-01</td>\n",
       "      <td>1.160673e+00</td>\n",
       "      <td>-2.870961e-01</td>\n",
       "      <td>2.718856e-01</td>\n",
       "      <td>-2.324721e-01</td>\n",
       "      <td>1.021286e-01</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>2.294174e+00</td>\n",
       "      <td>4.920404e+00</td>\n",
       "      <td>3.032397e+00</td>\n",
       "      <td>4.093999e-01</td>\n",
       "      <td>1.305455e+00</td>\n",
       "      <td>5.607339e+00</td>\n",
       "      <td>3.709645e-01</td>\n",
       "      <td>9.016696e-02</td>\n",
       "      <td>1.079584e-01</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3.958742e-01</td>\n",
       "      <td>3.088792e-01</td>\n",
       "      <td>5.486225e-01</td>\n",
       "      <td>4.721013e-01</td>\n",
       "      <td>1.729171e-01</td>\n",
       "      <td>9.885336e-02</td>\n",
       "      <td>3.088792e-01</td>\n",
       "      <td>4.019339e-02</td>\n",
       "      <td>1.825742e-01</td>\n",
       "      <td>8.550514e-02</td>\n",
       "      <td>2.332847e-01</td>\n",
       "      <td>9.253580e-01</td>\n",
       "      <td>3.150982e+00</td>\n",
       "      <td>1.833906e+00</td>\n",
       "      <td>1.877777e+00</td>\n",
       "      <td>2.718856e-01</td>\n",
       "      <td>4.519156e+00</td>\n",
       "      <td>1.021286e-01</td>\n",
       "      <td>4.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 f0            f1            f2            f3            f4  \\\n",
       "count  6.200000e+02  6.200000e+02  6.200000e+02  6.200000e+02  6.200000e+02   \n",
       "mean  -1.344802e-16  6.596874e-16  3.697759e-17  6.503758e-16 -9.454803e-17   \n",
       "std    1.000807e+00  1.000807e+00  1.000807e+00  1.000807e+00  1.000807e+00   \n",
       "min   -8.250977e-01 -2.642501e-01 -4.614228e-01 -2.442599e+00 -2.356907e+00   \n",
       "25%   -8.250977e-01 -2.642501e-01 -4.614228e-01  4.093999e-01 -5.257260e-01   \n",
       "50%   -3.794874e-01 -2.642501e-01 -4.614228e-01  4.093999e-01 -5.257260e-01   \n",
       "75%    5.117331e-01 -2.642501e-01 -4.614228e-01  4.093999e-01  1.305455e+00   \n",
       "max    2.294174e+00  4.920404e+00  3.032397e+00  4.093999e-01  1.305455e+00   \n",
       "\n",
       "                 f5            f6            f7            f8     f9  \\\n",
       "count  6.200000e+02  6.200000e+02  6.200000e+02  6.200000e+02  620.0   \n",
       "mean   1.146037e-16  1.577591e-16 -2.734820e-16  6.083843e-17    0.0   \n",
       "std    1.000807e+00  1.000807e+00  1.000807e+00  1.000807e+00    0.0   \n",
       "min   -2.761441e-01 -2.695676e+00 -1.109054e+01 -1.327888e+01    0.0   \n",
       "25%   -2.761441e-01  3.709645e-01  9.016696e-02  1.079584e-01    0.0   \n",
       "50%   -2.761441e-01  3.709645e-01  9.016696e-02  1.079584e-01    0.0   \n",
       "75%   -2.761441e-01  3.709645e-01  9.016696e-02  1.079584e-01    0.0   \n",
       "max    5.607339e+00  3.709645e-01  9.016696e-02  1.079584e-01    0.0   \n",
       "\n",
       "                f10           f11           f12           f13           f14  \\\n",
       "count  6.200000e+02  6.200000e+02  6.200000e+02  6.200000e+02  6.200000e+02   \n",
       "mean   2.494420e-16 -2.829278e-16 -8.899691e-17 -1.197966e-16 -2.104052e-17   \n",
       "std    1.000807e+00  1.000807e+00  1.000807e+00  1.000807e+00  1.000807e+00   \n",
       "min   -2.526055e+00 -3.237512e+00 -1.999287e+00 -2.118189e+00 -5.783117e+00   \n",
       "25%    3.958742e-01  3.088792e-01  5.486225e-01  4.721013e-01  1.729171e-01   \n",
       "50%    3.958742e-01  3.088792e-01  5.486225e-01  4.721013e-01  1.729171e-01   \n",
       "75%    3.958742e-01  3.088792e-01  5.486225e-01  4.721013e-01  1.729171e-01   \n",
       "max    3.958742e-01  3.088792e-01  5.486225e-01  4.721013e-01  1.729171e-01   \n",
       "\n",
       "                f15           f16           f17           f18           f19  \\\n",
       "count  6.200000e+02  6.200000e+02  6.200000e+02  6.200000e+02  6.200000e+02   \n",
       "mean  -8.366963e-17 -2.652000e-16 -3.377674e-16 -3.220542e-16  1.148947e-15   \n",
       "std    1.000807e+00  1.000807e+00  1.000807e+00  1.000807e+00  1.000807e+00   \n",
       "min   -1.011599e+01 -3.237512e+00 -2.487971e+01 -5.477226e+00 -1.316779e+01   \n",
       "25%    9.885336e-02  3.088792e-01  4.019339e-02  1.825742e-01  8.550514e-02   \n",
       "50%    9.885336e-02  3.088792e-01  4.019339e-02  1.825742e-01  8.550514e-02   \n",
       "75%    9.885336e-02  3.088792e-01  4.019339e-02  1.825742e-01  8.550514e-02   \n",
       "max    9.885336e-02  3.088792e-01  4.019339e-02  1.825742e-01  8.550514e-02   \n",
       "\n",
       "                f20           f21           f22           f23           f24  \\\n",
       "count  6.200000e+02  6.200000e+02  6.200000e+02  6.200000e+02  6.200000e+02   \n",
       "mean   1.893647e-16 -1.633102e-16 -9.383175e-17 -4.297638e-18  2.087936e-16   \n",
       "std    1.000807e+00  1.000807e+00  1.000807e+00  1.000807e+00  1.000807e+00   \n",
       "min   -4.286607e+00 -1.080663e+00 -1.079838e+00 -1.899472e+00 -6.876869e-01   \n",
       "25%    2.332847e-01 -1.080663e+00 -6.838333e-01 -4.063661e-01 -6.876869e-01   \n",
       "50%    2.332847e-01  9.253580e-01 -4.593178e-01 -4.061213e-01 -3.659525e-01   \n",
       "75%    2.332847e-01  9.253580e-01  4.432571e-01  1.160673e+00 -2.870961e-01   \n",
       "max    2.332847e-01  9.253580e-01  3.150982e+00  1.833906e+00  1.877777e+00   \n",
       "\n",
       "                f25           f26           f27       grade  \n",
       "count  6.200000e+02  6.200000e+02  6.200000e+02  620.000000  \n",
       "mean  -2.721837e-17 -2.615291e-16 -1.763822e-17    2.033871  \n",
       "std    1.000807e+00  1.000807e+00  1.000807e+00    0.630779  \n",
       "min   -4.914855e+00 -2.324721e-01 -1.572780e+01    0.000000  \n",
       "25%    2.718856e-01 -2.324721e-01  1.021286e-01    2.000000  \n",
       "50%    2.718856e-01 -2.324721e-01  1.021286e-01    2.000000  \n",
       "75%    2.718856e-01 -2.324721e-01  1.021286e-01    2.000000  \n",
       "max    2.718856e-01  4.519156e+00  1.021286e-01    4.000000  "
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>f0</th>\n",
       "      <th>f1</th>\n",
       "      <th>f2</th>\n",
       "      <th>f3</th>\n",
       "      <th>f4</th>\n",
       "      <th>f5</th>\n",
       "      <th>f6</th>\n",
       "      <th>f7</th>\n",
       "      <th>f8</th>\n",
       "      <th>f9</th>\n",
       "      <th>f10</th>\n",
       "      <th>f11</th>\n",
       "      <th>f12</th>\n",
       "      <th>f13</th>\n",
       "      <th>f14</th>\n",
       "      <th>f15</th>\n",
       "      <th>f16</th>\n",
       "      <th>f17</th>\n",
       "      <th>f18</th>\n",
       "      <th>f19</th>\n",
       "      <th>f20</th>\n",
       "      <th>f21</th>\n",
       "      <th>f22</th>\n",
       "      <th>f23</th>\n",
       "      <th>f24</th>\n",
       "      <th>f25</th>\n",
       "      <th>f26</th>\n",
       "      <th>f27</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "      <td>2.660000e+02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>-3.088590e-17</td>\n",
       "      <td>6.615427e-17</td>\n",
       "      <td>1.014226e-16</td>\n",
       "      <td>-2.433308e-16</td>\n",
       "      <td>-2.721299e-16</td>\n",
       "      <td>5.592853e-17</td>\n",
       "      <td>-2.003410e-17</td>\n",
       "      <td>-1.954368e-16</td>\n",
       "      <td>5.678415e-16</td>\n",
       "      <td>9.208382e-17</td>\n",
       "      <td>1.252131e-17</td>\n",
       "      <td>3.547705e-17</td>\n",
       "      <td>6.678033e-18</td>\n",
       "      <td>-2.712951e-17</td>\n",
       "      <td>-3.958822e-16</td>\n",
       "      <td>1.321520e-16</td>\n",
       "      <td>6.260656e-18</td>\n",
       "      <td>3.592051e-16</td>\n",
       "      <td>5.425902e-17</td>\n",
       "      <td>4.026124e-16</td>\n",
       "      <td>-7.638001e-17</td>\n",
       "      <td>1.719594e-16</td>\n",
       "      <td>-6.678033e-18</td>\n",
       "      <td>3.238846e-16</td>\n",
       "      <td>3.798131e-17</td>\n",
       "      <td>5.246430e-16</td>\n",
       "      <td>2.921640e-18</td>\n",
       "      <td>6.476649e-16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "      <td>1.001885e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-8.378122e-01</td>\n",
       "      <td>-2.736355e-01</td>\n",
       "      <td>-4.961188e-01</td>\n",
       "      <td>-2.158605e+00</td>\n",
       "      <td>-2.438092e+00</td>\n",
       "      <td>-2.428701e-01</td>\n",
       "      <td>-2.858743e+00</td>\n",
       "      <td>-8.093207e+00</td>\n",
       "      <td>-7.227801e+00</td>\n",
       "      <td>-1.627882e+01</td>\n",
       "      <td>-2.246209e+00</td>\n",
       "      <td>-3.605551e+00</td>\n",
       "      <td>-2.139737e+00</td>\n",
       "      <td>-2.527625e+00</td>\n",
       "      <td>-5.678908e+00</td>\n",
       "      <td>-1.627882e+01</td>\n",
       "      <td>-3.507136e+00</td>\n",
       "      <td>-1.627882e+01</td>\n",
       "      <td>-5.059644e+00</td>\n",
       "      <td>-1.627882e+01</td>\n",
       "      <td>-3.605551e+00</td>\n",
       "      <td>-1.128496e+00</td>\n",
       "      <td>-1.115677e+00</td>\n",
       "      <td>-1.918647e+00</td>\n",
       "      <td>-6.627625e-01</td>\n",
       "      <td>-5.880786e+00</td>\n",
       "      <td>-2.171091e-01</td>\n",
       "      <td>-1.148913e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-8.378122e-01</td>\n",
       "      <td>-2.736355e-01</td>\n",
       "      <td>-4.961188e-01</td>\n",
       "      <td>4.632622e-01</td>\n",
       "      <td>-5.851421e-01</td>\n",
       "      <td>-2.428701e-01</td>\n",
       "      <td>3.498040e-01</td>\n",
       "      <td>1.235604e-01</td>\n",
       "      <td>1.667954e-01</td>\n",
       "      <td>6.142951e-02</td>\n",
       "      <td>4.451946e-01</td>\n",
       "      <td>2.773501e-01</td>\n",
       "      <td>5.137365e-01</td>\n",
       "      <td>3.956283e-01</td>\n",
       "      <td>1.760902e-01</td>\n",
       "      <td>6.142951e-02</td>\n",
       "      <td>2.851330e-01</td>\n",
       "      <td>6.142951e-02</td>\n",
       "      <td>1.976424e-01</td>\n",
       "      <td>6.142951e-02</td>\n",
       "      <td>2.773501e-01</td>\n",
       "      <td>-1.128496e+00</td>\n",
       "      <td>-5.689352e-01</td>\n",
       "      <td>-4.345198e-01</td>\n",
       "      <td>-6.627625e-01</td>\n",
       "      <td>2.297182e-01</td>\n",
       "      <td>-2.171091e-01</td>\n",
       "      <td>8.703883e-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>-4.212551e-01</td>\n",
       "      <td>-2.736355e-01</td>\n",
       "      <td>-4.961188e-01</td>\n",
       "      <td>4.632622e-01</td>\n",
       "      <td>-5.851421e-01</td>\n",
       "      <td>-2.428701e-01</td>\n",
       "      <td>3.498040e-01</td>\n",
       "      <td>1.235604e-01</td>\n",
       "      <td>1.667954e-01</td>\n",
       "      <td>6.142951e-02</td>\n",
       "      <td>4.451946e-01</td>\n",
       "      <td>2.773501e-01</td>\n",
       "      <td>5.137365e-01</td>\n",
       "      <td>3.956283e-01</td>\n",
       "      <td>1.760902e-01</td>\n",
       "      <td>6.142951e-02</td>\n",
       "      <td>2.851330e-01</td>\n",
       "      <td>6.142951e-02</td>\n",
       "      <td>1.976424e-01</td>\n",
       "      <td>6.142951e-02</td>\n",
       "      <td>2.773501e-01</td>\n",
       "      <td>8.861348e-01</td>\n",
       "      <td>-4.486282e-01</td>\n",
       "      <td>-4.342682e-01</td>\n",
       "      <td>-3.264657e-01</td>\n",
       "      <td>2.297182e-01</td>\n",
       "      <td>-2.171091e-01</td>\n",
       "      <td>8.703883e-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>4.118591e-01</td>\n",
       "      <td>-2.736355e-01</td>\n",
       "      <td>-4.961188e-01</td>\n",
       "      <td>4.632622e-01</td>\n",
       "      <td>1.267808e+00</td>\n",
       "      <td>-2.428701e-01</td>\n",
       "      <td>3.498040e-01</td>\n",
       "      <td>1.235604e-01</td>\n",
       "      <td>1.667954e-01</td>\n",
       "      <td>6.142951e-02</td>\n",
       "      <td>4.451946e-01</td>\n",
       "      <td>2.773501e-01</td>\n",
       "      <td>5.137365e-01</td>\n",
       "      <td>3.956283e-01</td>\n",
       "      <td>1.760902e-01</td>\n",
       "      <td>6.142951e-02</td>\n",
       "      <td>2.851330e-01</td>\n",
       "      <td>6.142951e-02</td>\n",
       "      <td>1.976424e-01</td>\n",
       "      <td>6.142951e-02</td>\n",
       "      <td>2.773501e-01</td>\n",
       "      <td>8.861348e-01</td>\n",
       "      <td>5.031080e-01</td>\n",
       "      <td>1.100428e+00</td>\n",
       "      <td>-2.440400e-01</td>\n",
       "      <td>2.297182e-01</td>\n",
       "      <td>-2.171091e-01</td>\n",
       "      <td>8.703883e-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>2.078087e+00</td>\n",
       "      <td>4.569609e+00</td>\n",
       "      <td>2.852313e+00</td>\n",
       "      <td>4.632622e-01</td>\n",
       "      <td>1.267808e+00</td>\n",
       "      <td>5.568535e+00</td>\n",
       "      <td>3.498040e-01</td>\n",
       "      <td>1.235604e-01</td>\n",
       "      <td>1.667954e-01</td>\n",
       "      <td>6.142951e-02</td>\n",
       "      <td>4.451946e-01</td>\n",
       "      <td>2.773501e-01</td>\n",
       "      <td>5.137365e-01</td>\n",
       "      <td>3.956283e-01</td>\n",
       "      <td>1.760902e-01</td>\n",
       "      <td>6.142951e-02</td>\n",
       "      <td>2.851330e-01</td>\n",
       "      <td>6.142951e-02</td>\n",
       "      <td>1.976424e-01</td>\n",
       "      <td>6.142951e-02</td>\n",
       "      <td>2.773501e-01</td>\n",
       "      <td>8.861348e-01</td>\n",
       "      <td>3.363081e+00</td>\n",
       "      <td>1.867776e+00</td>\n",
       "      <td>2.018820e+00</td>\n",
       "      <td>2.297182e-01</td>\n",
       "      <td>4.663260e+00</td>\n",
       "      <td>8.703883e-02</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 f0            f1            f2            f3            f4  \\\n",
       "count  2.660000e+02  2.660000e+02  2.660000e+02  2.660000e+02  2.660000e+02   \n",
       "mean  -3.088590e-17  6.615427e-17  1.014226e-16 -2.433308e-16 -2.721299e-16   \n",
       "std    1.001885e+00  1.001885e+00  1.001885e+00  1.001885e+00  1.001885e+00   \n",
       "min   -8.378122e-01 -2.736355e-01 -4.961188e-01 -2.158605e+00 -2.438092e+00   \n",
       "25%   -8.378122e-01 -2.736355e-01 -4.961188e-01  4.632622e-01 -5.851421e-01   \n",
       "50%   -4.212551e-01 -2.736355e-01 -4.961188e-01  4.632622e-01 -5.851421e-01   \n",
       "75%    4.118591e-01 -2.736355e-01 -4.961188e-01  4.632622e-01  1.267808e+00   \n",
       "max    2.078087e+00  4.569609e+00  2.852313e+00  4.632622e-01  1.267808e+00   \n",
       "\n",
       "                 f5            f6            f7            f8            f9  \\\n",
       "count  2.660000e+02  2.660000e+02  2.660000e+02  2.660000e+02  2.660000e+02   \n",
       "mean   5.592853e-17 -2.003410e-17 -1.954368e-16  5.678415e-16  9.208382e-17   \n",
       "std    1.001885e+00  1.001885e+00  1.001885e+00  1.001885e+00  1.001885e+00   \n",
       "min   -2.428701e-01 -2.858743e+00 -8.093207e+00 -7.227801e+00 -1.627882e+01   \n",
       "25%   -2.428701e-01  3.498040e-01  1.235604e-01  1.667954e-01  6.142951e-02   \n",
       "50%   -2.428701e-01  3.498040e-01  1.235604e-01  1.667954e-01  6.142951e-02   \n",
       "75%   -2.428701e-01  3.498040e-01  1.235604e-01  1.667954e-01  6.142951e-02   \n",
       "max    5.568535e+00  3.498040e-01  1.235604e-01  1.667954e-01  6.142951e-02   \n",
       "\n",
       "                f10           f11           f12           f13           f14  \\\n",
       "count  2.660000e+02  2.660000e+02  2.660000e+02  2.660000e+02  2.660000e+02   \n",
       "mean   1.252131e-17  3.547705e-17  6.678033e-18 -2.712951e-17 -3.958822e-16   \n",
       "std    1.001885e+00  1.001885e+00  1.001885e+00  1.001885e+00  1.001885e+00   \n",
       "min   -2.246209e+00 -3.605551e+00 -2.139737e+00 -2.527625e+00 -5.678908e+00   \n",
       "25%    4.451946e-01  2.773501e-01  5.137365e-01  3.956283e-01  1.760902e-01   \n",
       "50%    4.451946e-01  2.773501e-01  5.137365e-01  3.956283e-01  1.760902e-01   \n",
       "75%    4.451946e-01  2.773501e-01  5.137365e-01  3.956283e-01  1.760902e-01   \n",
       "max    4.451946e-01  2.773501e-01  5.137365e-01  3.956283e-01  1.760902e-01   \n",
       "\n",
       "                f15           f16           f17           f18           f19  \\\n",
       "count  2.660000e+02  2.660000e+02  2.660000e+02  2.660000e+02  2.660000e+02   \n",
       "mean   1.321520e-16  6.260656e-18  3.592051e-16  5.425902e-17  4.026124e-16   \n",
       "std    1.001885e+00  1.001885e+00  1.001885e+00  1.001885e+00  1.001885e+00   \n",
       "min   -1.627882e+01 -3.507136e+00 -1.627882e+01 -5.059644e+00 -1.627882e+01   \n",
       "25%    6.142951e-02  2.851330e-01  6.142951e-02  1.976424e-01  6.142951e-02   \n",
       "50%    6.142951e-02  2.851330e-01  6.142951e-02  1.976424e-01  6.142951e-02   \n",
       "75%    6.142951e-02  2.851330e-01  6.142951e-02  1.976424e-01  6.142951e-02   \n",
       "max    6.142951e-02  2.851330e-01  6.142951e-02  1.976424e-01  6.142951e-02   \n",
       "\n",
       "                f20           f21           f22           f23           f24  \\\n",
       "count  2.660000e+02  2.660000e+02  2.660000e+02  2.660000e+02  2.660000e+02   \n",
       "mean  -7.638001e-17  1.719594e-16 -6.678033e-18  3.238846e-16  3.798131e-17   \n",
       "std    1.001885e+00  1.001885e+00  1.001885e+00  1.001885e+00  1.001885e+00   \n",
       "min   -3.605551e+00 -1.128496e+00 -1.115677e+00 -1.918647e+00 -6.627625e-01   \n",
       "25%    2.773501e-01 -1.128496e+00 -5.689352e-01 -4.345198e-01 -6.627625e-01   \n",
       "50%    2.773501e-01  8.861348e-01 -4.486282e-01 -4.342682e-01 -3.264657e-01   \n",
       "75%    2.773501e-01  8.861348e-01  5.031080e-01  1.100428e+00 -2.440400e-01   \n",
       "max    2.773501e-01  8.861348e-01  3.363081e+00  1.867776e+00  2.018820e+00   \n",
       "\n",
       "                f25           f26           f27  \n",
       "count  2.660000e+02  2.660000e+02  2.660000e+02  \n",
       "mean   5.246430e-16  2.921640e-18  6.476649e-16  \n",
       "std    1.001885e+00  1.001885e+00  1.001885e+00  \n",
       "min   -5.880786e+00 -2.171091e-01 -1.148913e+01  \n",
       "25%    2.297182e-01 -2.171091e-01  8.703883e-02  \n",
       "50%    2.297182e-01 -2.171091e-01  8.703883e-02  \n",
       "75%    2.297182e-01 -2.171091e-01  8.703883e-02  \n",
       "max    2.297182e-01  4.663260e+00  8.703883e-02  "
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### One major thing to check here is that we have same Standard Deviation across all features for train and test.\n",
    "\n",
    "- Train : 1.000807\n",
    "- Test : 1.001885\n",
    "\n",
    "What this implies is that this data might be artificially generated and then normalised/scaled seperatly for train and test. And the values inside th features can be of categorical nature.\n",
    "\n",
    "But what is not connecting is that we are not able to map train feature values to test feature values as they are different if they indeed are of categorical nature.\n",
    "\n",
    "Let's deep dive into the distribution of feature values."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.825098    0.487097\n",
       " 0.511733    0.293548\n",
       " 2.294174    0.091935\n",
       "-0.379487    0.059677\n",
       " 0.066123    0.027419\n",
       " 1.848564    0.019355\n",
       " 1.402954    0.012903\n",
       " 0.957343    0.008065\n",
       "Name: f0, dtype: float64"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Let's check for feature \"f0\" : \n",
    "# *dividing by number of records to get the percentage.\n",
    "\n",
    "train['f0'].value_counts() / train.shape[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.837812    0.488722\n",
       " 0.411859    0.263158\n",
       " 2.078087    0.109023\n",
       "-0.421255    0.052632\n",
       " 1.244973    0.030075\n",
       " 1.661530    0.026316\n",
       " 0.828416    0.018797\n",
       "-0.004698    0.011278\n",
       "Name: f0, dtype: float64"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test['f0'].value_counts() / test.shape[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that there is some kind of mapping between train and test values. \n",
    "\n",
    "For example : \n",
    "    \n",
    " - Train has a value : *\"-0.825098\"* and consists for *48.70% of train values*.\n",
    "\n",
    " - Test has a values : *\"-0.837812\"* and consists for *48.88% of test.values*.\n",
    "\n",
    "So we map the test values with the corresponding train values, if our hypothesis regarding their categorical nature is True.\n",
    "\n",
    "Let's check if it is the case with other features too."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [],
   "source": [
    "def check_value_counts_perc(train, test, col):\n",
    "    result = pd.concat([(train[col].value_counts() / train.shape[0]).reset_index(), \n",
    "                        (test[col].value_counts() / test.shape[0]).reset_index()], \n",
    "                       axis=1)\n",
    "    result.columns = ['train_value', 'train_perc', 'test_value', 'test_perc']\n",
    "    \n",
    "    return result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>train_value</th>\n",
       "      <th>train_perc</th>\n",
       "      <th>test_value</th>\n",
       "      <th>test_perc</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.409400</td>\n",
       "      <td>0.856452</td>\n",
       "      <td>0.463262</td>\n",
       "      <td>0.823308</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-2.442599</td>\n",
       "      <td>0.143548</td>\n",
       "      <td>-2.158605</td>\n",
       "      <td>0.176692</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   train_value  train_perc  test_value  test_perc\n",
       "0     0.409400    0.856452    0.463262   0.823308\n",
       "1    -2.442599    0.143548   -2.158605   0.176692"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "check_value_counts_perc(train, test, \"f3\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see the similar relationship across most of the features except : \n",
    "\n",
    "1. f1\n",
    "1. f2\n",
    "1. f5\n",
    "1. f19\n",
    "1. f22\n",
    "1. f23\n",
    "1. f24\n",
    "1. f27\n",
    "\n",
    "These features are exception due to the train have more unique values than test uniques, so we can't get a particular one-to-one mapping between Train and Test. \n",
    "\n",
    "And feature \"f9\" has only 1 unique value in train set, so let's remove that feature."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "So to map the test values to train values, I've created a function which maps test value to closest train value as seen in the relation tables above."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_closest(train, col, value):\n",
    "    a = train[col].unique().tolist()\n",
    "    min_idx = min(range(len(a)), key=lambda i: abs(a[i]-value))\n",
    "\n",
    "    return a[min_idx]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [],
   "source": [
    "dont_consider_feats = ['f1', 'f2', 'f5', 'f19', 'f22', 'f23', 'f24', 'f27']\n",
    "\n",
    "for col in train.columns.tolist():\n",
    "    if col not in dont_consider_feats + [target]:\n",
    "        test[col] = test[col].apply(lambda x: get_closest(train, col, x))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Sanity Check : Now checking the test values are in train or not."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of elements which are in test and not in train : \n",
      "f0 -->\t 0\n",
      "----------\n",
      "f3 -->\t 0\n",
      "----------\n",
      "f4 -->\t 0\n",
      "----------\n",
      "f6 -->\t 0\n",
      "----------\n",
      "f7 -->\t 0\n",
      "----------\n",
      "f8 -->\t 0\n",
      "----------\n",
      "f9 -->\t 0\n",
      "----------\n",
      "f10 -->\t 0\n",
      "----------\n",
      "f11 -->\t 0\n",
      "----------\n",
      "f12 -->\t 0\n",
      "----------\n",
      "f13 -->\t 0\n",
      "----------\n",
      "f14 -->\t 0\n",
      "----------\n",
      "f15 -->\t 0\n",
      "----------\n",
      "f16 -->\t 0\n",
      "----------\n",
      "f17 -->\t 0\n",
      "----------\n",
      "f18 -->\t 0\n",
      "----------\n",
      "f20 -->\t 0\n",
      "----------\n",
      "f21 -->\t 0\n",
      "----------\n",
      "f25 -->\t 0\n",
      "----------\n",
      "f26 -->\t 0\n",
      "----------\n"
     ]
    }
   ],
   "source": [
    "print(\"Number of elements which are in test and not in train : \")\n",
    "for col in train.columns.tolist():\n",
    "    if col not in dont_consider_feats + [target]:\n",
    "        print(\"{} -->\\t {}\".format(col, len(set(test[col].unique()) - set(train[col].unique()))))\n",
    "        print(\"--\"*5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that the differences are 0 elements so our mapping was sucessfull."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Another way of doing same can be to use MinMax Scaling seperatly for both train and test as both have different distributions.\n",
    "\n",
    "**PS : LeaderBoard favored this.** "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train Shape : (620, 29)\n",
      "Test Shape : (266, 28)\n"
     ]
    }
   ],
   "source": [
    "# Re-importing the data.\n",
    "\n",
    "train, test = get_data(path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>f0</th>\n",
       "      <th>f1</th>\n",
       "      <th>f2</th>\n",
       "      <th>f3</th>\n",
       "      <th>f4</th>\n",
       "      <th>f5</th>\n",
       "      <th>f6</th>\n",
       "      <th>f7</th>\n",
       "      <th>f8</th>\n",
       "      <th>f9</th>\n",
       "      <th>f10</th>\n",
       "      <th>f11</th>\n",
       "      <th>f12</th>\n",
       "      <th>f13</th>\n",
       "      <th>f14</th>\n",
       "      <th>f15</th>\n",
       "      <th>f16</th>\n",
       "      <th>f17</th>\n",
       "      <th>f18</th>\n",
       "      <th>f19</th>\n",
       "      <th>f20</th>\n",
       "      <th>f21</th>\n",
       "      <th>f22</th>\n",
       "      <th>f23</th>\n",
       "      <th>f24</th>\n",
       "      <th>f25</th>\n",
       "      <th>f26</th>\n",
       "      <th>f27</th>\n",
       "      <th>grade</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.848564</td>\n",
       "      <td>-0.26425</td>\n",
       "      <td>-0.461423</td>\n",
       "      <td>0.409400</td>\n",
       "      <td>1.305455</td>\n",
       "      <td>2.329398</td>\n",
       "      <td>0.370965</td>\n",
       "      <td>0.090167</td>\n",
       "      <td>0.107958</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.395874</td>\n",
       "      <td>0.308879</td>\n",
       "      <td>0.548623</td>\n",
       "      <td>0.472101</td>\n",
       "      <td>0.172917</td>\n",
       "      <td>0.098853</td>\n",
       "      <td>0.308879</td>\n",
       "      <td>0.040193</td>\n",
       "      <td>0.182574</td>\n",
       "      <td>0.085505</td>\n",
       "      <td>0.233285</td>\n",
       "      <td>-1.080663</td>\n",
       "      <td>0.443257</td>\n",
       "      <td>-0.406121</td>\n",
       "      <td>-0.687687</td>\n",
       "      <td>0.271886</td>\n",
       "      <td>3.727218</td>\n",
       "      <td>0.102129</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.825098</td>\n",
       "      <td>-0.26425</td>\n",
       "      <td>3.032397</td>\n",
       "      <td>-2.442599</td>\n",
       "      <td>1.305455</td>\n",
       "      <td>-0.276144</td>\n",
       "      <td>0.370965</td>\n",
       "      <td>0.090167</td>\n",
       "      <td>0.107958</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.395874</td>\n",
       "      <td>0.308879</td>\n",
       "      <td>0.548623</td>\n",
       "      <td>0.472101</td>\n",
       "      <td>0.172917</td>\n",
       "      <td>0.098853</td>\n",
       "      <td>0.308879</td>\n",
       "      <td>0.040193</td>\n",
       "      <td>0.182574</td>\n",
       "      <td>0.085505</td>\n",
       "      <td>0.233285</td>\n",
       "      <td>-1.080663</td>\n",
       "      <td>-0.232546</td>\n",
       "      <td>-0.406366</td>\n",
       "      <td>-0.687687</td>\n",
       "      <td>0.271886</td>\n",
       "      <td>-0.232472</td>\n",
       "      <td>0.102129</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         f0       f1        f2        f3        f4        f5        f6  \\\n",
       "0  1.848564 -0.26425 -0.461423  0.409400  1.305455  2.329398  0.370965   \n",
       "1 -0.825098 -0.26425  3.032397 -2.442599  1.305455 -0.276144  0.370965   \n",
       "\n",
       "         f7        f8   f9       f10       f11       f12       f13       f14  \\\n",
       "0  0.090167  0.107958  0.0  0.395874  0.308879  0.548623  0.472101  0.172917   \n",
       "1  0.090167  0.107958  0.0  0.395874  0.308879  0.548623  0.472101  0.172917   \n",
       "\n",
       "        f15       f16       f17       f18       f19       f20       f21  \\\n",
       "0  0.098853  0.308879  0.040193  0.182574  0.085505  0.233285 -1.080663   \n",
       "1  0.098853  0.308879  0.040193  0.182574  0.085505  0.233285 -1.080663   \n",
       "\n",
       "        f22       f23       f24       f25       f26       f27  grade  \n",
       "0  0.443257 -0.406121 -0.687687  0.271886  3.727218  0.102129      2  \n",
       "1 -0.232546 -0.406366 -0.687687  0.271886 -0.232472  0.102129      4  "
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>f0</th>\n",
       "      <th>f1</th>\n",
       "      <th>f2</th>\n",
       "      <th>f3</th>\n",
       "      <th>f4</th>\n",
       "      <th>f5</th>\n",
       "      <th>f6</th>\n",
       "      <th>f7</th>\n",
       "      <th>f8</th>\n",
       "      <th>f9</th>\n",
       "      <th>f10</th>\n",
       "      <th>f11</th>\n",
       "      <th>f12</th>\n",
       "      <th>f13</th>\n",
       "      <th>f14</th>\n",
       "      <th>f15</th>\n",
       "      <th>f16</th>\n",
       "      <th>f17</th>\n",
       "      <th>f18</th>\n",
       "      <th>f19</th>\n",
       "      <th>f20</th>\n",
       "      <th>f21</th>\n",
       "      <th>f22</th>\n",
       "      <th>f23</th>\n",
       "      <th>f24</th>\n",
       "      <th>f25</th>\n",
       "      <th>f26</th>\n",
       "      <th>f27</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.837812</td>\n",
       "      <td>-0.273636</td>\n",
       "      <td>1.276580</td>\n",
       "      <td>0.463262</td>\n",
       "      <td>-0.585142</td>\n",
       "      <td>-0.24287</td>\n",
       "      <td>0.349804</td>\n",
       "      <td>0.12356</td>\n",
       "      <td>0.166795</td>\n",
       "      <td>0.06143</td>\n",
       "      <td>0.445195</td>\n",
       "      <td>0.27735</td>\n",
       "      <td>-2.139737</td>\n",
       "      <td>-2.527625</td>\n",
       "      <td>0.17609</td>\n",
       "      <td>0.06143</td>\n",
       "      <td>0.285133</td>\n",
       "      <td>0.06143</td>\n",
       "      <td>0.197642</td>\n",
       "      <td>0.06143</td>\n",
       "      <td>0.27735</td>\n",
       "      <td>0.886135</td>\n",
       "      <td>-0.568935</td>\n",
       "      <td>1.100428</td>\n",
       "      <td>-0.244589</td>\n",
       "      <td>0.229718</td>\n",
       "      <td>-0.217109</td>\n",
       "      <td>0.087039</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.078087</td>\n",
       "      <td>-0.273636</td>\n",
       "      <td>-0.496119</td>\n",
       "      <td>0.463262</td>\n",
       "      <td>-2.438092</td>\n",
       "      <td>-0.24287</td>\n",
       "      <td>0.349804</td>\n",
       "      <td>0.12356</td>\n",
       "      <td>0.166795</td>\n",
       "      <td>0.06143</td>\n",
       "      <td>0.445195</td>\n",
       "      <td>0.27735</td>\n",
       "      <td>0.513736</td>\n",
       "      <td>0.395628</td>\n",
       "      <td>0.17609</td>\n",
       "      <td>0.06143</td>\n",
       "      <td>0.285133</td>\n",
       "      <td>0.06143</td>\n",
       "      <td>-5.059644</td>\n",
       "      <td>0.06143</td>\n",
       "      <td>0.27735</td>\n",
       "      <td>0.886135</td>\n",
       "      <td>0.504299</td>\n",
       "      <td>-0.434268</td>\n",
       "      <td>-0.244040</td>\n",
       "      <td>0.229718</td>\n",
       "      <td>-0.217109</td>\n",
       "      <td>0.087039</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         f0        f1        f2        f3        f4       f5        f6  \\\n",
       "0 -0.837812 -0.273636  1.276580  0.463262 -0.585142 -0.24287  0.349804   \n",
       "1  2.078087 -0.273636 -0.496119  0.463262 -2.438092 -0.24287  0.349804   \n",
       "\n",
       "        f7        f8       f9       f10      f11       f12       f13      f14  \\\n",
       "0  0.12356  0.166795  0.06143  0.445195  0.27735 -2.139737 -2.527625  0.17609   \n",
       "1  0.12356  0.166795  0.06143  0.445195  0.27735  0.513736  0.395628  0.17609   \n",
       "\n",
       "       f15       f16      f17       f18      f19      f20       f21       f22  \\\n",
       "0  0.06143  0.285133  0.06143  0.197642  0.06143  0.27735  0.886135 -0.568935   \n",
       "1  0.06143  0.285133  0.06143 -5.059644  0.06143  0.27735  0.886135  0.504299   \n",
       "\n",
       "        f23       f24       f25       f26       f27  \n",
       "0  1.100428 -0.244589  0.229718 -0.217109  0.087039  \n",
       "1 -0.434268 -0.244040  0.229718 -0.217109  0.087039  "
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.head(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Length of features : 27\n"
     ]
    }
   ],
   "source": [
    "feat = train.columns.tolist()\n",
    "feat.remove(\"f9\")\n",
    "feat.remove(target)\n",
    "\n",
    "print(\"Length of features : {}\".format(len(feat)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [],
   "source": [
    "mm = MinMaxScaler()\n",
    "\n",
    "for col in feat:\n",
    "    train[col] = mm.fit_transform(train[[col]])\n",
    "    test[col] = mm.fit_transform(test[[col]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>f0</th>\n",
       "      <th>f1</th>\n",
       "      <th>f2</th>\n",
       "      <th>f3</th>\n",
       "      <th>f4</th>\n",
       "      <th>f5</th>\n",
       "      <th>f6</th>\n",
       "      <th>f7</th>\n",
       "      <th>f8</th>\n",
       "      <th>f9</th>\n",
       "      <th>f10</th>\n",
       "      <th>f11</th>\n",
       "      <th>f12</th>\n",
       "      <th>f13</th>\n",
       "      <th>f14</th>\n",
       "      <th>f15</th>\n",
       "      <th>f16</th>\n",
       "      <th>f17</th>\n",
       "      <th>f18</th>\n",
       "      <th>f19</th>\n",
       "      <th>f20</th>\n",
       "      <th>f21</th>\n",
       "      <th>f22</th>\n",
       "      <th>f23</th>\n",
       "      <th>f24</th>\n",
       "      <th>f25</th>\n",
       "      <th>f26</th>\n",
       "      <th>f27</th>\n",
       "      <th>grade</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.857143</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.442857</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.360000</td>\n",
       "      <td>0.400000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.200267</td>\n",
       "      <td>0.399934</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         f0   f1   f2   f3   f4        f5   f6   f7   f8   f9  f10  f11  f12  \\\n",
       "0  0.857143  0.0  0.0  1.0  1.0  0.442857  1.0  1.0  1.0  0.0  1.0  1.0  1.0   \n",
       "1  0.000000  0.0  1.0  0.0  1.0  0.000000  1.0  1.0  1.0  0.0  1.0  1.0  1.0   \n",
       "\n",
       "   f13  f14  f15  f16  f17  f18  f19  f20  f21       f22       f23  f24  f25  \\\n",
       "0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  0.0  0.360000  0.400000  0.0  1.0   \n",
       "1  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  0.0  0.200267  0.399934  0.0  1.0   \n",
       "\n",
       "        f26  f27  grade  \n",
       "0  0.833333  1.0      2  \n",
       "1  0.000000  1.0      4  "
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>f0</th>\n",
       "      <th>f1</th>\n",
       "      <th>f2</th>\n",
       "      <th>f3</th>\n",
       "      <th>f4</th>\n",
       "      <th>f5</th>\n",
       "      <th>f6</th>\n",
       "      <th>f7</th>\n",
       "      <th>f8</th>\n",
       "      <th>f9</th>\n",
       "      <th>f10</th>\n",
       "      <th>f11</th>\n",
       "      <th>f12</th>\n",
       "      <th>f13</th>\n",
       "      <th>f14</th>\n",
       "      <th>f15</th>\n",
       "      <th>f16</th>\n",
       "      <th>f17</th>\n",
       "      <th>f18</th>\n",
       "      <th>f19</th>\n",
       "      <th>f20</th>\n",
       "      <th>f21</th>\n",
       "      <th>f22</th>\n",
       "      <th>f23</th>\n",
       "      <th>f24</th>\n",
       "      <th>f25</th>\n",
       "      <th>f26</th>\n",
       "      <th>f27</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.529412</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.06143</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.122074</td>\n",
       "      <td>0.797342</td>\n",
       "      <td>0.155943</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.06143</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.361702</td>\n",
       "      <td>0.392027</td>\n",
       "      <td>0.156148</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    f0   f1        f2   f3   f4   f5   f6   f7   f8       f9  f10  f11  f12  \\\n",
       "0  0.0  0.0  0.529412  1.0  0.5  0.0  1.0  1.0  1.0  0.06143  1.0  1.0  0.0   \n",
       "1  1.0  0.0  0.000000  1.0  0.0  0.0  1.0  1.0  1.0  0.06143  1.0  1.0  1.0   \n",
       "\n",
       "   f13  f14  f15  f16  f17  f18  f19  f20  f21       f22       f23       f24  \\\n",
       "0  0.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  0.122074  0.797342  0.155943   \n",
       "1  1.0  1.0  1.0  1.0  1.0  0.0  1.0  1.0  1.0  0.361702  0.392027  0.156148   \n",
       "\n",
       "   f25  f26  f27  \n",
       "0  1.0  0.0  1.0  \n",
       "1  1.0  0.0  1.0  "
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.head(2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Magic. See how most of the decimal values turned into 0's and 1's both in train and test due to reverse-scaling of the values."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### SMOTE Oversampling : Due to the imbalance of target values in the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2    76.129032\n",
       "1    10.967742\n",
       "3     7.580645\n",
       "4     4.354839\n",
       "0     0.967742\n",
       "Name: grade, dtype: float64"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(train[target].value_counts() / train.shape[0])*100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "After Oversampling : (2360, 27) --> (2360,)\n"
     ]
    }
   ],
   "source": [
    "sm = SMOTE(random_state=13, sampling_strategy='all')\n",
    "X_train_ovr, y_train_ovr = sm.fit_sample(train[feat], train[target])\n",
    "\n",
    "print(\"After Oversampling : {} --> {}\".format(X_train_ovr.shape, y_train_ovr.shape))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2360, 29)"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_ovr = pd.DataFrame(X_train_ovr, columns=train.columns.tolist())\n",
    "train_ovr[target] = y_train_ovr\n",
    "\n",
    "train_ovr.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3    20.0\n",
       "1    20.0\n",
       "4    20.0\n",
       "2    20.0\n",
       "0    20.0\n",
       "Name: grade, dtype: float64"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(train_ovr[target].value_counts() / train_ovr.shape[0])*100"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### We have totally balanced classes right now. But we have to understand that we also have to make the model understand the imbalance of classes because the test set also might have the same kind of imbalances.\n",
    "\n",
    "I've kept this section here because applying SMOTE increases your score on the public leaderboard way up.\n",
    "\n",
    "You can comment this section to get the private best submission."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Baselining"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [],
   "source": [
    "def baseliner(X, y, cv=3, metric='neg_log_loss'):\n",
    "    print(\"Baseliner Models\\n\")\n",
    "    eval_dict = {}\n",
    "    models = [lgb.LGBMClassifier(), xgb.XGBClassifier(), GradientBoostingClassifier(),\n",
    "                  LogisticRegression(), GaussianNB(), RandomForestClassifier(), DecisionTreeClassifier(),\n",
    "                  ExtraTreeClassifier(), AdaBoostClassifier(), BaggingClassifier(), ExtraTreesClassifier(),\n",
    "              SVC(probability=True), KNeighborsClassifier() \n",
    "                 ]\n",
    "    print(\"Model Name \\t |   CV\")\n",
    "    print(\"--\" * 50)\n",
    "\n",
    "    for index, model in enumerate(models, 0):\n",
    "        model_name = str(model).split(\"(\")[0]\n",
    "        eval_dict[model_name] = {}\n",
    "\n",
    "        results = cross_val_score(model, X, y, cv=cv, scoring=metric)\n",
    "        eval_dict[model_name]['cv'] = results.mean()\n",
    "\n",
    "        print(\"%s \\t | %.4f \\t\" % (\n",
    "            model_name[:12], eval_dict[model_name]['cv']))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Baseliner Models\n",
      "\n",
      "Model Name \t |   CV\n",
      "----------------------------------------------------------------------------------------------------\n",
      "LGBMClassifi \t | -0.2522 \t\n",
      "XGBClassifie \t | -0.1753 \t\n",
      "GradientBoos \t | -0.2195 \t\n",
      "LogisticRegr \t | -0.4035 \t\n",
      "GaussianNB \t | -15.2884 \t\n",
      "RandomForest \t | -0.2709 \t\n",
      "DecisionTree \t | -2.6181 \t\n",
      "ExtraTreeCla \t | -4.0691 \t\n",
      "AdaBoostClas \t | -1.2696 \t\n",
      "BaggingClass \t | -0.4569 \t\n",
      "ExtraTreesCl \t | -0.4819 \t\n",
      "SVC \t | -0.3605 \t\n",
      "KNeighborsCl \t | -0.9636 \t\n"
     ]
    }
   ],
   "source": [
    "baseliner(train[feat], train[target])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### We can see that gradient boosting works better for now i.e LightGBM & XGBoost."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Utilities for Modelling"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [],
   "source": [
    "def splitter(X, y, ts=False):\n",
    "    if ts:\n",
    "        trainX, validX, trainY, validY = train_test_split(X,\n",
    "                                                          y, test_size=0.15,\n",
    "                                                          random_state=13, shuffle=False)\n",
    "    else:\n",
    "        trainX, validX, trainY, validY = train_test_split(X,\n",
    "                                                      y, test_size=0.15,\n",
    "                                                      random_state=13)\n",
    "    return trainX, validX, trainY, validY\n",
    "\n",
    "def xgb_model(X, X_test, y, ts=False):\n",
    "\n",
    "    MAX_ROUNDS=2000\n",
    "    early_stopping_rounds=100\n",
    "    params = {\n",
    "        'booster': 'gbtree',\n",
    "        'objective': 'multi:softprob',\n",
    "        'eval_metric': 'mlogloss',\n",
    "        'learning_rate': 0.06,\n",
    "        'num_round': MAX_ROUNDS,\n",
    "        'max_depth': 8,\n",
    "        'seed': 13,\n",
    "        'nthread': -1,\n",
    "        \"num_class\": 5,\n",
    "    }\n",
    "    \n",
    "    X_train, X_valid, y_train, y_valid = splitter(X, y, ts=ts)\n",
    "    print(X_train.shape, X_valid.shape, y_train.shape, y_valid.shape)\n",
    "\n",
    "    dtrain = xgb.DMatrix(X_train, label=y_train)\n",
    "    dvalid = xgb.DMatrix(X_valid, label=y_valid)\n",
    "    watchlist = [(dtrain, 'train'), (dvalid, 'valid')]\n",
    "\n",
    "    model = xgb.train(\n",
    "        params,\n",
    "        dtrain,\n",
    "        evals=watchlist,\n",
    "        num_boost_round=MAX_ROUNDS,\n",
    "        early_stopping_rounds=early_stopping_rounds,\n",
    "        verbose_eval=50\n",
    "    )\n",
    "    print(\"Best Iteration :: \", model.best_iteration)\n",
    "\n",
    "    # Plotting Importances\n",
    "    fig, ax = plt.subplots(figsize=(24, 24))\n",
    "    xgb.plot_importance(model, height=0.4, ax=ax)\n",
    "    preds = model.predict(xgb.DMatrix(X_test), ntree_limit=model.best_ntree_limit)\n",
    "\n",
    "    return model, preds"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Modelling"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(527, 27) (93, 27) (527,) (93,)\n",
      "[0]\ttrain-mlogloss:1.48457\tvalid-mlogloss:1.49537\n",
      "Multiple eval metrics have been passed: 'valid-mlogloss' will be used for early stopping.\n",
      "\n",
      "Will train until valid-mlogloss hasn't improved in 100 rounds.\n",
      "[50]\ttrain-mlogloss:0.144644\tvalid-mlogloss:0.287787\n",
      "[100]\ttrain-mlogloss:0.054622\tvalid-mlogloss:0.234181\n",
      "[150]\ttrain-mlogloss:0.036065\tvalid-mlogloss:0.226338\n",
      "[200]\ttrain-mlogloss:0.029773\tvalid-mlogloss:0.224078\n",
      "[250]\ttrain-mlogloss:0.026577\tvalid-mlogloss:0.228595\n",
      "Stopping. Best iteration:\n",
      "[180]\ttrain-mlogloss:0.03176\tvalid-mlogloss:0.222235\n",
      "\n",
      "Best Iteration ::  180\n"
     ]
    },
    {
     "data": {
      "image/png": "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JFtttVV22223/PSnP83rXve6NccsX748pZQkyZvf/OY129/4xjfmgQceSJKUUjJu3LgkydNPP52nn356zWvYNAzLFbmllIVJJie5IsletdbHOrtuTrJjktRaf1Zrva3z86+S/DDJK4ZjHgAAAADY1A0MDOT222/PXnvtlST52Mc+lle+8pX56le/uuaK3MEuuOCCHHTQQWuer1y5Mr29vdluu+0ya9asNedh0zAsIbfWekKSB5PMrLWePWjXe5N8Z+jxpZRJSaYl+efhmAcAAAAANmXLli3LnDlzcs455+SlL31pkuTMM8/M0qVLc9RRR+Vzn/vcWsdfe+21ueCCC/KXf/mXa7aNHj06d9xxRx544IH8y7/8S+66664R/Qz8fkqtdXhOXMpAkhm11l90ns9M8oUke9daHx103Lgk1yU5s9Z62XOc7/gkxyfJhAnbTp9/zvnDMjewadp+bPLQk92eAmiJdQEYyroADGVdoHU9r3hZkmTFihX5yEc+kje84Q155zvfuc5xP//5z/ORj3wkX/7yl5MkP/7xjzN//vwsWLAgr3zlK9d77osvvjhbbLFFjjjiiOH7AJugZcuWrbkFxUiZOXPmrbXWGb/ruBEJuaWUKUkuT3JQrfVHg47ZLMmVSf6x1vqZDT33TpN3rqPeee7zPTKwCZvXsyJnLRnO234DmxrrAjCUdQEYyrpA6wYWzE6tNe95z3syfvz4nHPOOWv2/du//Vte85rXJEk++9nP5rrrrss3v/nN/OQnP8kf//Ef52/+5m/Wul/uI488ks022yxbb711nnzyyRxwwAE57bTTcsghh4z452pZf39/+vr6RvQ9SykbFHKHfbUqpeyU5LIkRw+JuCXJBVn9RWgbHHEBAAAA4MXixhtvzFe+8pX09PSkt7c3SfLJT34yF1xwQe65556MGjUqr3rVq7Jw4cIkyemnn55HH300J510UpJkzJgxueWWW/Kzn/0s73nPe7Jy5cqsWrUq73znO0XcTcxI/LXT/CTbJPlC55vwVnQK8x8lOTrJklLKHZ1jP1pr/YcRmAkAAAAAmrf33ntnff+i/uCDD17v8V/60pfypS99aZ3tU6ZMye233/68z8fIGbaQW2ud1PnxuM5j6P7/naQM1/sDAAAAALxQjOr2AAAAAAAAPDchFwAAAACgcUIuAAAAAEDjhFwAAAAAgMYJ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C/AC9fjjj+fwww/Prrvumt122y033XRTPvjBD2bXXXfNlClTcthhh+Xxxx9Pkjz11FM55phj0tPTk6lTp6a/v7+7wwMAAABr6UrILaWcXEr5YSnlq53nbyilrCylHN6NeQBeiE455ZQceOCBufvuu7N48eLstttumTVrVu66667ceeed2WWXXfIXf/EXSZLzzz8/SbJkyZJcffXVmTdvXlatWtXN8QEAAIBBunVF7klJDq61HlVKGZ3kL5P8Y5dmAXjBeeKJJ3L99dfnve99b5Jk8803z9Zbb50DDjggY8aMSZK88Y1vzAMPPJAk+cEPfpD9998/SbLddttl6623zi233NKd4QEAAIB1jHjILaUsTDI5yRWllP8nyQeSXJrk4ZGeBeCF6r777su2226bY445JtOmTctxxx2X5cuXr3XMhRdemIMOOihJMnXq1Pz93/99VqxYkfvvvz+33nprli5d2o3RAQAAgPUY8ZBbaz0hyYNJZib5RpLDkiwc6TkAXshWrFiR2267LSeeeGJuv/32bLnlllmwYMGa/WeeeWbGjBmTo446Kkly7LHHZscdd8yMGTNy6qmn5s1vfvOaK3cBAACA7uv2/0s/J8lptdaVpZTnPLCUcnyS45NkwoRtM79nxQiMB2wqth+bzLMuJEn6+/vzH//xH5kwYUKefPLJ9Pf359WvfnX+7u/+Lvvvv3+++93v5tvf/nbOOuusXHfddWte97a3vS1ve9vbkiTvf//789hjj/nSMzZpy5Yt879hYC3WBWAo6wIwVMvrQrdD7owkX+tE3AlJDi6lrKi1fmvogbXW85KclyQ7Td65nrWk26MDLZnXsyLWhdUGjupLkpx99tnZYYcd8trXvjb9/f3ZZ5998pvf/CZXXHFFrrvuumy77bZrXvPrX/86tdZsueWWufrqqzN+/PjMnTu3Ox8Anif9/f3p6+vr9hhAQ6wLwFDWBWColteFrlaPWusfPvNzKeWiJFeuL+IC8J/32c9+NkcddVSeeuqpTJ48OV/+8pfzhje8Ib/97W8za9asJKu/8GzhwoV5+OGH85a3vCWjRo3KK17xinzlK1/p8vQAAADAYC5fA3iB6u3tzS233LLWtnvvvXe9x06aNCn33HPPSIwFAAAAbISuhNxa66T1bJs78pMAAAAAALRvVLcHAAAAAADguQm5AAAAAACNE3IB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FizIypUrM2LEiCxbtixHH310F6aH197KlSs3+ecAwLkADOZcAAZzLgCDtXwudDXkJvmjJD+otf40SUopX07yfyTZLOTWWhclWZQke0+cVC94uNujd1f/vJnr/7O/P7vuumtmzlz/fPHixbnpppty5513Zo899hjY/9BDDw08/sQnPpFRo0bljDM2+btzsE3r7e0d+OcAIHEuAJtzLgCDOReAwVo+Fzr9x8625odJDiql7FJKKUkOS/J4l2faZhx33HE5+OCDs3Tp0owfPz6XX355PvShD+XZZ5/N7NmzM3369Jx88sndHhMAAAAA+A0Ny2WtpZQ9k9yfZHSSdaWU05K8vdZ6Tynl+iQPJFmT5MFsuOqWrbvmmms2W/vgBz+41fd94hOf6MA0AAAAAECndDTk1lonbPR0/MvsOSfJOZ2cAwAAAABgW9btWysAAAAAALAVQi4AAAAAQOOEXAAAAACAxgm5AAAAAACNE3IBAAAAABon5AIAAAAANE7IBQAAAABoXE+3B3g1dt5hZJYuPLLbYwAAAAAADAtX5AIAAAAANE7IBQAAAABonJALAAAAANA4IRcAAAAAoHFCLgAAAABA44RcAAAAAIDGCbkAAAAAAI0TcgEAAAAAGifkAgAAAAA0TsgFAAAAAGickAsAAAAA0DghFwAAAACgcUIuAAAAAEDjhFwAAAAAgMYJuQAAAAAAjRNyAQAAAAAaJ+QCAAAAADROyAUAAAAAaJyQCwAAAADQOCEXAAAAAKBxQi4AAAAAQOOEXAAAAACAxgm5AAAAAACNE3IBAAAAABon5AIAAAAANE7IBQAAAABonJALAAAAANA4IRcAAAAAoHFCLgAAAABA44RcAAAAAIDGCbkAAAAAAI0TcgEAAAAAGifkAgAAAAA0rqfbA7waz61emwln3tztMTquf+GR3R4BAAAAAGiAK3IBAAAAABon5AIAAAAANE7IBQAAAABonJALAAAAANA4IRcAAAAAoHFCbuNOPPHEjB07NlOmTBlYu+666zJ58uSMGDEi999//8D6z3/+88yaNSujRo3Khz70oW6MCwAAAAB0QFdCbillQSnl8VLKDaWUu0opL5RSzujGLK074YQTsnjx4k3WpkyZki9/+cs59NBDN1nfaaed8td//dc5//zzh3NEAAAAAKDDerr0c09NckSSVUn2SfKeLs3RvEMPPTT9/f2brO23335b3LvrrrvmkEMOyfe///1hmAwAAAAAGC7DfkVuKeWyJBOT3JRkXq31viSrh3sOAAAAAIBtxbBfkVtrPbmUcniSWbXWnw33zwcAAAAA2NZ069YKv7ZSyklJTkqSMWP2yNlT13R5os7r7e1Nkjz11FNZtWrVwPMXPf300/nud7+blStXbrL+xBNPZMWKFZvth+3ZypUr/c4Dm3AuAIM5F4DBnAvAYC2fC9tMyK21LkqyKEn2njip/v/t3X+U3nV95/3XOxnUyIJIAy2QpmnWajFBMcmSmyMbh/sWBOOu5ujtGtlWpN34Y6tbe7h7Y+9zs2W3npu7K4vabfWkgNXihrPZBeHcUsRtndpDpUuolB+yoRyYs/woAhXFCXEh8Ln/yAUmQ4KSzDXXZ5LH45w5ueb7/c71/Vwe5801z/Od71x025xZ+j6bPGt857+Tkzn00EMzPj6+2/4jjjgiK1euzKpVq3b/usnJTE1NPe94OJBNTEz4/zywG3MBmM5cAKYzF4Dpep4LB34NnePWr1+fiYmJPProo1m0aFEuuOCCHHnkkfnIRz6SRx55JGvXrs2JJ56Yr371q0mSJUuW5PHHH8+TTz6ZL3/5y7n++uvz2te+dsSvAgAAAADYHyMNuVX1M0m2JDk8yTNV9etJXttae3yU6+rJpk2b9rh93bp1e9w+OTk5xNUAAAAAAKMwkpDbWluyy6eLRrEGAAAAAIC5Yt6oFwAAAAAAwAsTcgEAAAAAOifkAgAAAAB0TsgFAAAAAOickAsAAAAA0DkhFwAAAACgc2OjXsC+WHDI/Gy9cO2olwEAAAAAMCtckQsAAAAA0DkhFwAAAACgc0IuAAAAAEDnhFwAAAAAgM4JuQAAAAAAnRNyAQAAAAA6J+QCAAAAAHROyAUAAAAA6JyQCwAAAADQOSEXAAAAAKBzQi4AAAAAQOeEXAAAAACAzgm5AAAAAACdE3IBAAAAADon5AIAAAAAdE7IBQAAAADonJALAAAAANA5IRcAAAAAoHNCLgAAAABA54RcAAAAAIDOCbkAAAAAAJ0TcgEAAAAAOifkAgAAAAB0TsgFAAAAAOickAsAAAAA0DkhFwAAAACgc0IuAAAAAEDnhFwAAAAAgM4JuQAAAAAAnRNyAQAAAAA6J+QCAAAAAHROyAUAAAAA6JyQCwAAAADQubFRL2BfbH/q6Sw57yujXsaLNnnh2lEvAQAAAACYg1yRCwAAAADQOSEXAAAAAKBzQi4AAAAAQOeEXAAAAACAzgm5AAAAAACdE3IBAAAAADon5I7AxRdfnGXLlmX58uVZv359fvjDH+ZP//RPs2LFipx44ok55ZRTcvfdd496mQAAAABAJ4Yacqvqo1V1Z1X9l6r6ZlX9z6o6dw/Hza+qb1XV/zfM9fTggQceyGc+85ls2bIlt99+e55++ulcccUV+dCHPpQvfelLueWWW/Le9743v/M7vzPqpQIAAAAAnRgb8vN/OMmZSbYl+bkk79jLcf8qyZ1JDh/yerqwY8eObN++PYccckieeOKJHHvssamqPP7440mS73//+zn22GNHvEoAAAAAoBdDC7lV9bkkS5Nck+Sy1trFVbV2D8ctSrI2ySeS/Maw1tOL4447Lueee24WL16cBQsW5PTTT8/pp5+eSy65JG9961uzYMGCHH744bnxxhtHvVQAAAAAoBNDu7VCa+2DSR5Mcmpr7eIXOPRTSX4zyTPDWktPHnvssVx99dW599578+CDD2bbtm25/PLLc/HFF+faa6/N/fffn/e///35jd844Js2AAAAAPATGvatFV5QVb0tycOttZuravzHHLshyYYkWbjwqJx/wo5ZWOHMmpiYyMTERF72spfljjvuSJIcf/zx2bx5c7Zs2ZLt27dnYmIiixcvzu///u9nYmJitAuGOWRqasr3DLAbcwGYzlwApjMXgOl6ngsjDblJ3pjkn1bVW5O8LMnhVXV5a+2fTz+wtbYxycYkWbz0Ve2i20a99Bdv8qzxLFiwIJs3b85JJ52UBQsW5POf/3ze/OY354Ybbsixxx6bV7/61bn00kuzcuXKjI+Pj3rJMGdMTEz4ngF2Yy4A05kLwHTmAjBdz3NhpDW0tfbxJB9PksEVuefuKeIeSFavXp13vetdWbFiRcbGxvKGN7whGzZsyKJFi/LOd74z8+bNyytf+cpcdtllo14qAAAAANCJWQm5VfUzSbYkOTzJM1X160le21p7fDbO35sLLrggF1xwwW7b1q1bl3Xr1o1oRQAAAABAz4YacltrS3b5dNGPOXYiycQQlwMAAAAAMCfNG/UCAAAAAAB4YUIuAAAAAEDnhFwAAAAAgM4JuQAAAAAAnRNyAQAAAAA6J+QCAAAAAHRubNQL2BcLDpmfrReuHfUyAAAAAABmhStyAQAAAAA6J+QCAAAAAHROyAUAAAAA6JyQCwAAAADQOSEXAAAAAKBzQi4AAAAAQOeEXAAAAACAzgm5AAAAAACdE3IBAAAAADon5AIAAAAAdE7IBQAAAADonJALAAAAANA5IRcAAAAAoHNCLgAAAABA54RcAAAAAIDOCbkAAAAAAJ0TcgEAAAAAOifkAgAAAAB0TsgFAAAAAOickAsAAAAA0DkhFwAAAACgc0IuAAAAAEDnhFwAAAAAgM4JuQAAAAAAnRNyAQAAAAA6J+QCAAAAAHROyAUAAAAA6JyQCwAAAADQOSEXAAAAAKBzQi4AAAAAQOeEXAAAAACAzgm5AAAAAACdE3IBAAAAADo3NuoF7IvtTz2dJed95Sc6dvLCtUNeDQAAAADAcLkiFwAAAACgc0IuAAAAAEDnhFwAAAAAgM4JuQAAAAAAnRNyAQAAAAA6d1CE3Pvuuy+nnnpqjj/++Cxbtiyf/vSnkySbN2/OsmXLMm/evGzZsmXEqwQAAAAA2LOxUZy0qj6a5ENJFif5213WcnySo1pr353J842NjeWiiy7KihUr8oMf/CArV67MaaedluXLl+fKK6/MBz7wgZk8HQAAAADAjBpJyE3y4SRnttbufXZDVf2TJB+b6YibJMccc0yOOeaYJMlhhx2W448/Pg888EBOO+20mT4VAAAAAMCMm/VbK1TV55IsTXJNVX1sl13rk2wa9vknJyfzrW99K6tXrx72qQAAAAAAZsSsX5HbWvtgVZ2R5NTW2qNJUlUvT3JGkl8b5rmnpqbyzne+M5/61Kdy+OGHD/NUAAAAAAAzZlS3VpjunyS54YVuq1BVG5JsSJKFC4/K+Sfs+ImeeGJiIkmyY8eOfPzjH8/q1atz5JFHPrc9Sb73ve/l5ptvztTU1D6/AGC0pqamdvu+BjAXgOnMBWA6cwGYrue50EvIfU9+zG0VWmsbk2xMksVLX9Uuuu0nW/rkWeNpreV973tf3vjGN+ZTn/rU84454ogjsnLlyqxaterFrxzowsTERMbHx0e9DKAj5gIwnbkATGcuANP1PBdm/R6501XVK5K8KcnVwzrHDTfckD/+4z/On/3Zn+XEE0/MiSeemGuvvTZXXXVVFi1alG9+85tZu3Zt3vKWtwxrCQAAAAAA+6yHK3LXJbm+tbZtWCc45ZRT0lrb88nXrRvWaQEAAAAAZsRIQm5rbckuj/8oyR+NYh0AAAAAAHPByG+tAAAAAADACxNyAQAAAAA6J+QCAAAAAHROyAUAAAAA6JyQCwAAAADQOSEXAAAAAKBzQi4AAAAAQOfGRr2AfbHgkPnZeuHaUS8DAAAAAGBWuCIXAAAAAKBzQi4AAAAAQOeEXAAAAACAzgm5AAAAAACdE3IBAAAAADon5AIAAAAAdE7IBQAAAADonJALAAAAANA5IRcAAAAAoHNCLgAAAABA54RcAAAAAIDOCbkAAAAAAJ0TcgEAAAAAOifkAgAAAAB0TsgFAAAAAOickAsAAAAA0DkhFwAAAACgc0IuAAAAAEDnhFwAAAAAgM4JuQAAAAAAnRNyAQAAAAA6J+QCAAAAAHROyAUAAAAA6JyQCwAAAADQOSEXAAAAAKBzQi4AAAAAQOeEXAAAAACAzgm5AAAAAACdE3IBAAAAADon5AIAAAAAdE7IBQAAAADonJALAAAAANA5IRcAAAAAoHNjo17Avtj+1NNZct5X9rp/8sK1s7gaAAAAAIDhckUuAAAAAEDnhFwAAAAAgM4JuQAAAAAAnRNyAQAAAAA6KG9ujgAAG1VJREFUJ+QCAAAAAHTugA6555xzTo4++ugsX758t+2/93u/l9e85jVZtmxZfvM3f3NEqwMAAAAA+MkMNeRW1Uer6s6qalV16+DjL6vq9bscc0ZVba2qu6vqvJk8/9lnn53rrrtut21f//rXc/XVV+fWW2/NHXfckXPPPXcmTwkAAAAAMOPGhvz8H05yZpJjktzZWnusqs5MsjHJ6qqan+T3k5yW5P4kN1XVNa21b8/EydesWZPJycndtn32s5/Neeedl5e+9KVJkqOPPnomTgUAAAAAMDRDuyK3qj6XZGmSa5Ksbq09Nth1Y5JFg8cnJbm7tXZPa+3JJFckefuw1pQkd911V/7iL/4iq1evzpve9KbcdNNNwzwdAAAAAMB+G9oVua21D1bVGUlOba09usuuX0nyJ4PHxyW5b5d99ydZPaw1JcmOHTvy2GOP5cYbb8xNN92Ud7/73bnnnntSVcM8LQAAAADAPhv2rRV2U1WnZmfIPeXZTXs4rO3lazck2ZAkCxcelfNP2LHX80xMTDz3+KGHHsq2bdue2/byl788S5cuzZ//+Z8nSZ588slcffXVOeKII17kqwF6MjU1tdv3PoC5AExnLgDTmQvAdD3PhVkLuVX1uiSXJDmztfb3g833J/nZXQ5blOTBPX19a21jdt5bN4uXvqpddNvelz551viPHk9O5tBDD834+M5t55xzTh588MGMj4/nrrvuyrx58/L2t7/dFbkwx01MTDz3fQ6QmAvA85kLwHTmAjBdz3NhaPfI3VVVLU5yZZJfaq3dtcuum5L8QlX9fFW9JMl7svOeujNi/fr1Ofnkk7N169YsWrQol156ac4555zcc889Wb58ed7znvfkC1/4gogLAAAAAHRttq7IPT/JTyX5g0E03dFaW9Va21FVv5bkq0nmJ7mstXbHTJ1006ZNe9x++eWXz9QpAAAAAACGbqght7W2ZPDwVwcfezrm2iTXDnMdAAAAAABz2azcWgEAAAAAgH0n5AIAAAAAdE7IBQAAAADonJALAAAAANA5IRcAAAAAoHNCLgAAAABA54RcAAAAAIDOjY16AftiwSHzs/XCtaNeBgAAAADArHBFLgAAAABA54RcAAAAAIDOCbkAAAAAAJ0TcgEAAAAAOifkAgAAAAB0TsgFAAAAAOickAsAAAAA0DkhFwAAAACgc0IuAAAAAEDnhFwAAAAAgM4JuQAAAAAAnRNyAQAAAAA6J+QCAAAAAHROyAUAAAAA6JyQCwAAAADQOSEXAAAAAKBzQi4AAAAAQOeEXAAAAACAzgm5AAAAAACdE3IBAAAAADon5AIAAAAAdE7IBQAAAADonJALAAAAANA5IRcAAAAAoHNCLgAAAABA54RcAAAAAIDOCbkAAAAAAJ0TcgEAAAAAOifkAgAAAAB0TsgFAAAAAOickAsAAAAA0DkhFwAAAACgc0IuAAAAAEDnxka9gH2x/amns+S8r+xx3+SFa2d5NQAAAAAAw+WKXAAAAACAzgm5AAAAAACdE3IBAAAAADon5AIAAAAAdE7IBQAAAADo3AEbcs8555wcffTRWb58+fP2ffKTn0xV5dFHHx3BygAAAAAAXpyRhNyq+mhV3VlVj1XVrVV1S1VtqapTZuocZ599dq677rrnbb/vvvvyta99LYsXL56pUwEAAAAADNWorsj9cJK3JvnZJK9vrZ2Y5Jwkl8zUCdasWZMjjzzyeds/9rGP5Xd/93dTVTN1KgAAAACAoZr1kFtVn0uyNMk1Sf5Fa60Ndh2apO31C2fANddck+OOOy6vf/3rh3kaAAAAAIAZNTbbJ2ytfbCqzkhyamvt0apal+T/SXJ0krXDOu8TTzyRT3ziE7n++uuHdQoAAAAAgKGY9ZA7XWvtqiRXVdWaJP82yZv3dFxVbUiyIUkWLjwq55+wY4/PNzEx8dzjhx56KNu2bcvExETuueee3HXXXXnNa16TJHnkkUeybNmyfPazn93jLRiAuWVqamq3738AcwGYzlwApjMXgOl6ngv1ozsbzOJJqyaTrGqtPTpt+71J/tH07dMtXvqqNu/dn97jvskLf3RR7+TkZN72trfl9ttvf95xS5YsyZYtW7Jw4cIX/wKA7kxMTGR8fHzUywA6Yi4A05kLwHTmAjDdKOZCVd3cWlv1444b1R87S5JU1atq8FfHqmpFkpck+fuZeO7169fn5JNPztatW7No0aJceumlM/G0AAAAAACzbtS3Vnhnkl+uqqeSbE/yz9oMXSK8adOmF9w/OTk5E6cBAAAAABi6kYTc1tqSwcP/d/ABAAAAAMBejPTWCgAAAAAA/HhCLgAAAABA54RcAAAAAIDOCbkAAAAAAJ0TcgEAAAAAOifkAgAAAAB0bmzUC9gXCw6Zn60Xrh31MgAAAAAAZoUrcgEAAAAAOifkAgAAAAB0TsgFAAAAAOickAsAAAAA0DkhFwAAAACgc0IuAAAAAEDnhFwAAAAAgM4JuQAAAAAAnRNyAQAAAAA6J+QCAAAAAHROyAUAAAAA6JyQCwAAAADQOSEXAAAAAKBzQi4AAAAAQOeEXAAAAACAzgm5AAAAAACdE3IBAAAAADon5AIAAAAAdE7IBQAAAADonJALAAAAANA5IRcAAAAAoHNCLgAAAABA54RcAAAAAIDOCbkAAAAAAJ0TcgEAAAAAOifkAgAAAAB0TsgFAAAAAOickAsAAAAA0DkhFwAAAACgc0IuAAAAAEDnhFwAAAAAgM4JuQAAAAAAnRNyAQAAAAA6NzbqBeyL7U89nSXnfWW3bZMXrh3RagAAAAAAhssVuQAAAAAAnRNyAQAAAAA6J+QCAAAAAHROyAUAAAAA6JyQCwAAAADQOSEXAAAAAKBzB1zIPeecc3L00Udn+fLlz23bvHlzli1blnnz5mXLli0jXB0AAAAAwIs3tJBbVR+tqjurqlXVrYOPv6yq1+9yzGRV3VZVt1TVjBTWs88+O9ddd91u25YvX54rr7wya9asmYlTAAAAAADMqrEhPveHk5yZ5Jgkd7bWHquqM5NsTLJ6l+NOba09OlMnXbNmTSYnJ3fbdvzxx8/U0wMAAAAAzLqhXJFbVZ9LsjTJNUlWt9YeG+y6McmiYZwTAAAAAOBANZSQ21r7YJIHs/Nq24t32fUrSf5k10OTXF9VN1fVhmGsBQAAAABgrhvmrRV2U1WnZmfIPWWXzW9srT1YVUcn+VpV/ffW2jf28vUbkmxIkoULj8r5J+zYbf/ExMRzjx966KFs27Ztt21J8r3vfS8333xzpqam9v8FAV2Zmpp63vc8cHAzF4DpzAVgOnMBmK7nuTArIbeqXpfkkiRnttb+/tntrbUHB/8+XFVXJTkpyR5DbmttY3beXzeLl76qXXTb7kufPGv8R48nJ3PooYdmfHx8t2OOOOKIrFy5MqtWrdr/FwV0ZWJi4nnf88DBzVwApjMXgOnMBWC6nufCUG6tsKuqWpzkyiS/1Fq7a5fth1bVYc8+TnJ6ktv393zr16/PySefnK1bt2bRokW59NJLc9VVV2XRokX55je/mbVr1+Ytb3nL/p4GAAAAAGDWzMYVuecn+akkf1BVSbKjtbYqyU8nuWqwbSzJf2ytXbe/J9u0adMet69bt25/nxoAAAAAYCSGFnJba0sGD3918DF9/z1JXj+s8wMAAAAAHCiGfmsFAAAAAAD2j5ALAAAAANA5IRcAAAAAoHNCLgAAAABA54RcAAAAAIDOCbkAAAAAAJ0bG/UC9sWCQ+Zn64VrR70MAAAAAIBZ4YpcAAAAAIDOCbkAAAAAAJ0TcgEAAAAAOifkAgAAAAB0TsgFAAAAAOickAsAAAAA0DkhFwAAAACgc0IuAAAAAEDnhFwAAAAAgM4JuQAAAAAAnRNyAQAAAAA6J+QCAAAAAHROyAUAAAAA6JyQCwAAAADQOSEXAAAAAKBzQi4AAAAAQOeEXAAAAACAzgm5AAAAAACdE3IBAAAAADon5AIAAAAAdE7IBQAAAADonJALAAAAANA5IRcAAAAAoHNCLgAAAABA54RcAAAAAIDOCbkAAAAAAJ0TcgEAAAAAOifkAgAAAAB0TsgFAAAAAOickAsAAAAA0DkhFwAAAACgc0IuAAAAAEDnhFwAAAAAgM6NjXoB+2L7U09nyXlfee7zyQvXjnA1AAAAAADD5YpcAAAAAIDOCbkAAAAAAJ0TcgEAAAAAOifkAgAAAAB0TsgFAAAAAOjcARVyL7744ixbtizLly/P+vXr88Mf/nDUSwIAAAAA2G9DC7lV9dGqurOqWlXdOvj4y6p6/S7HHFFV/7mq/vvg2JP39XwPPPBAPvOZz2TLli25/fbb8/TTT+eKK66YmRcDAAAAADBCY0N87g8nOTPJMUnubK09VlVnJtmYZPXgmE8nua619q6qekmSl+/PCXfs2JHt27fnkEMOyRNPPJFjjz12f54OAAAAAKALQ7kit6o+l2RpkmuSrG6tPTbYdWOSRYNjDk+yJsmlSdJae7K19r19Pedxxx2Xc889N4sXL84xxxyTV7ziFTn99NP363UAAAAAAPRgKCG3tfbBJA8mObW1dvEuu34lyZ8MHi9N8kiSz1fVt6rqkqo6dF/P+dhjj+Xqq6/OvffemwcffDDbtm3L5Zdfvs+vAQAAAACgF8O8tcJuqurU7Ay5p+xy7hVJPtJa+6uq+nSS85L833v5+g1JNiTJwoVH5fwTdjy3b2JiIhMTE3nZy16WO+64I0ly/PHHZ/PmzVm0aNGwXhLQkampqUxMTIx6GUBHzAVgOnMBmM5cAKbreS7MSsitqtcluSTJma21vx9svj/J/a21vxp8/p+zM+TuUWttY3beXzeLl76qXXTbj5Y+edZ4FixYkM2bN+ekk07KggUL8vnPfz5vfvObMz4+PoRXBPRmYmLC9zuwG3MBmM5cAKYzF4Dpep4LQ7m1wq6qanGSK5P8Umvtrme3t9YeSnJfVb1msOl/S/LtfT3P6tWr8653vSsrVqzICSeckGeeeSYbNmzYr7UDAAAAAPRgNq7IPT/JTyX5g6pKkh2ttVWDfR9J8qWqekmSe5K8f39OdMEFF+SCCy7Yn6cAAAAAAOjO0EJua23J4OGvDj72dMwtSVbtaR8AAAAAADsN/dYKAAAAAADsHyEXAAAAAKBzQi4AAAAAQOeEXAAAAACAzgm5AAAAAACdE3IBAAAAADon5AIAAAAAdG5s1AvYFwsOmZ+tF64d9TIAAAAAAGaFK3IBAAAAADon5AIAAAAAdE7IBQAAAADonJALAAAAANA5IRcAAAAAoHNCLgAAAABA54RcAAAAAIDOCbkAAAAAAJ0TcgEAAAAAOifkAgAAAAB0TsgFAAAAAOickAsAAAAA0DkhFwAAAACgc0IuAAAAAEDnhFwAAAAAgM4JuQAAAAAAnRNyAQAAAAA6J+QCAAAAAHROyAUAAAAA6JyQCwAAAADQOSEXAAAAAKBzQi4AAAAAQOeEXAAAAACAzgm5AAAAAACdE3IBAAAAADon5AIAAAAAdE7IBQAAAADonJALAAAAANA5IRcAAAAAoHNCLgAAAABA54RcAAAAAIDOCbkAAAAAAJ0TcgEAAAAAOjcnQ+72p57OkvO+MuplAAAAAADMijkZcgEAAAAADiZCLgAAAABA54RcAAAAAIDOCbkAAAAAAJ0TcgEAAAAAOjc26gXMlCVLluSwww7L/PnzMzY2li1btox6SQAAAAAAM2JoIbeqPprkQ0m+neTYJCuS/F+ttU/ucsxlSd6W5OHW2vL9PefXv/71LFy4cH+fBgAAAACgK8O8IvfDSc5Msi3JzyV5xx6O+aMk/yHJF4e4DgAAAACAOW0o98itqs8lWZrkmiRntdZuSvLU9ONaa99I8t0ZOmdOP/30rFy5Mhs3bpyJpwQAAAAA6MJQrshtrX2wqs5Icmpr7dFhnGO6G264Iccee2wefvjhnHbaafnFX/zFrFmzZjZODQAAAAAwVHPmj51V1YYkG5Jk4cKjcv4JOzIxMbHbMXfddVeS5A1veEM2bdqUZ555ZraXCYzI1NTU82YCcHAzF4DpzAVgOnMBmK7nuTBnQm5rbWOSjUmyeOmr2kW3jWXyrPEkybZt2/LMM8/ksMMOy7Zt2/Jbv/VbOf/88zM+Pj66BQOzamJiwvc8sBtzAZjOXACmMxeA6XqeC3Mm5L6Q73znO1m3bl2SZMeOHXnve9+bM844Y8SrAgAAAACYGUMPuVX1M0m2JDk8yTNV9etJXttae7yqNiUZT7Kwqu5P8q9ba5e+2HMsXbo0f/M3fzOTywYAAAAA6MbQQm5rbckuny7ayzHrh3V+AAAAAIADxbxRLwAAAAAAgBcm5AIAAAAAdE7IBQAAAADonJALAAAAANA5IRcAAAAAoHNCLgAAAABA5+ZkyF1wyPxMXrh21MsAAAAAAJgVczLkAgAAAAAcTIRcAAAAAIDOCbkAAAAAAJ0TcgEAAAAAOifkAgAAAAB0TsgFAAAAAOickAsAAAAA0DkhFwAAAACgc0IuAAAAAEDnhFwAAAAAgM4JuQAAAAAAnRNyAQAAAAA6J+QCAAAAAHROyAUAAAAA6JyQCwAAAADQOSEXAAAAAKBzQi4AAAAAQOeEXAAAAACAzgm5AAAAAACdE3IBAAAAADon5AIAAAAAdE7IBQAAAADonJALAAAAANA5IRcAAAAAoHNCLgAAAABA54RcAAAAAIDOCbkAAAAAAJ0TcgEAAAAAOifkAgAAAAB0TsgFAAAAAOickAsAAAAA0DkhFwAAAACgc0IuAAAAAEDnhFwAAAAAgM4JuQAAAAAAnRNyAQAAAAA6J+QCAAAAAHROyAUAAAAA6JyQCwAAAADQOSEXAAAAAKBzQi4AAAAAQOeEXAAAAACAzgm5AAAAAACdE3IBAAAAADon5AIAAAAAdK5aa6New4tWVT9IsnXU6wC6sjDJo6NeBNAVcwGYzlwApjMXgOlGMRd+rrV21I87aGw2VjIEW1trq0a9CKAfVbXFXAB2ZS4A05kLwHTmAjBdz3PBrRUAAAAAADon5AIAAAAAdG6uhtyNo14A0B1zAZjOXACmMxeA6cwFYLpu58Kc/GNnAAAAAAAHk7l6RS4AAAAAwEFjToXcqjqjqrZW1d1Vdd6o1wPMnqqarKrbquqWqtoy2HZkVX2tqv528O8rB9urqj4zmBW3VtWK0a4emAlVdVlVPVxVt++y7UXPgap63+D4v62q943itQAzYy9z4ber6oHBe4Zbquqtu+z7+GAubK2qt+yy3c8ZcICoqp+tqq9X1Z1VdUdV/avBdu8Z4CD1AnNhzr1nmDO3Vqiq+UnuSnJakvuT3JRkfWvt2yNdGDArqmoyyarW2qO7bPvdJN9trV04GKCvbK39n4Ph+5Ekb02yOsmnW2urR7FuYOZU1ZokU0m+2FpbPtj2ouZAVR2ZZEuSVUlakpuTrGytPTaClwTsp73Mhd9OMtVa++S0Y1+bZFOSk5Icm+S/Jnn1YLefM+AAUVXHJDmmtfbXVXVYdv63/h1Jzo73DHBQeoG58O7MsfcMc+mK3JOS3N1au6e19mSSK5K8fcRrAkbr7Um+MHj8hewcxM9u/2Lb6cYkRwwGNzCHtda+keS70za/2DnwliRfa619d/CD2NeSnDH81QPDsJe5sDdvT3JFa+1/ttbuTXJ3dv6M4ecMOIC01v6utfbXg8c/SHJnkuPiPQMctF5gLuxNt+8Z5lLIPS7Jfbt8fn9e+H904MDSklxfVTdX1YbBtp9urf1dsnMwJzl6sN28gIPHi50D5gMcHH5t8CvSlz3769MxF+CgU1VLkrwhyV/FewYgz5sLyRx7zzCXQm7tYdvcuC8EMBPe2FpbkeTMJP9y8KuUe2NeAHubA+YDHPg+m+QfJjkxyd8luWiw3VyAg0hV/YMk/yXJr7fWHn+hQ/ewzWyAA9Ae5sKce88wl0Lu/Ul+dpfPFyV5cERrAWZZa+3Bwb8PJ7kqO3+l4TvP3jJh8O/Dg8PNCzh4vNg5YD7AAa619p3W2tOttWeS/GF2vmdIzAU4aFTVIdkZa77UWrtysNl7BjiI7WkuzMX3DHMp5N6U5Beq6uer6iVJ3pPkmhGvCZgFVXXo4IbkqapDk5ye5PbsnAHP/vXY9yW5evD4miS/PPgLtP9Lku8/+2tUwAHnxc6BryY5vapeOfjVqdMH24ADxLT74q/LzvcMyc658J6qemlV/XySX0jy3+LnDDigVFUluTTJna21f7/LLu8Z4CC1t7kwF98zjM3myfZHa21HVf1adg7O+Ukua63dMeJlAbPjp5NctXP2ZizJf2ytXVdVNyX5T1X1K0n+R5L/fXD8tdn5V2fvTvJEkvfP/pKBmVZVm5KMJ1lYVfcn+ddJLsyLmAOtte9W1b/NzjdhSfJvWms/6R9KAjqzl7kwXlUnZuevOk4m+UCStNbuqKr/lOTbSXYk+ZettacHz+PnDDhwvDHJLyW5rapuGWz7rXjPAAezvc2F9XPtPUO15hYvAAAAAAA9m0u3VgAAAAAAOCgJuQAAAAAAnRNyAQAAAAA6J+QCAAAAAHROyAUAAAAA6NzYqBcAAAAzraqeTnLbLpve0VqbHNFyAABgv1VrbdRrAACAGVVVU621fzCL5xtrre2YrfMBAHDwcWsFAAAOOlV1TFV9o6puqarbq+ofD7afUVV/XVV/U1V/Oth2ZFV9uapuraobq+p1g+2/XVUbq+r6JF+sqvlV9e+q6qbBsR8Y4UsEAOAA49YKAAAciBZU1S2Dx/e21tZN2//eJF9trX2iquYneXlVHZXkD5Osaa3dW1VHDo69IMm3WmvvqKr/NckXk5w42LcyySmtte1VtSHJ91tr/6iqXprkhqq6vrV27zBfKAAABwchFwCAA9H21tqJL7D/piSXVdUhSb7cWrulqsaTfOPZ8Npa++7g2FOSvHOw7c+q6qeq6hWDfde01rYPHp+e5HVV9a7B569I8gtJhFwAAPabkAsAwEGntfaNqlqTZG2SP66qf5fke0n29Ackak9PMfh327TjPtJa++qMLhYAAOIeuQAAHISq6ueSPNxa+8MklyZZkeSbSd5UVT8/OObZWyt8I8lZg23jSR5trT2+h6f9apIPDa7yTVW9uqoOHeoLAQDgoOGKXAAADkbjSf6PqnoqyVSSX26tPTK4z+2VVTUvycNJTkvy20k+X1W3Jnkiyfv28pyXJFmS5K+rqpI8kuQdw3wRAAAcPKq1Pf32GAAAAAAAvXBrBQAAAACAzgm5AAAAAACdE3IBAAAAADon5AIAAAAAdE7IBQAAAADonJALAAAAANA5IRcAAAAAoHNCLgAAAABA5/5/7Rxl60ptxLcAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 1728x1728 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "xgbM, xgb_preds = xgb_model(train[feat], test[feat], train[target])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Now fitting on full data (as it is we have less data with very imbalanced classes)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0]\ttrain-mlogloss:1.48475\n",
      "Will train until train-mlogloss hasn't improved in 100 rounds.\n",
      "[50]\ttrain-mlogloss:0.143565\n",
      "[100]\ttrain-mlogloss:0.053436\n",
      "[150]\ttrain-mlogloss:0.033532\n",
      "[200]\ttrain-mlogloss:0.027077\n",
      "[249]\ttrain-mlogloss:0.023775\n",
      "Best Iteration ::  249\n"
     ]
    },
    {
     "data": {
      "image/png": "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AAAAAGg4IRcAAAAAoOGEXAAAAACAhhNyAQAAAAAaTsgFAAAAAGg4IRcAAAAAoOGEXAAAAACAhhNyAQAAAAAaTsgFAAAAAGg4IRcAAAAAoOGEXAAAAACAhhNyAQAAAAAaTsgFAAAAAGg4IRcAAAAAoOGEXAAAAACAhhNyAQAAAAAaTsgFAAAAAGi40b0eYE08/uTyTDz5il6PAazH5vQN53D7DNBh9hpYPw3Nm93rEQCA9ZArcgEAAAAAGk7IBQAAAABoOCEXAAAAAKDhhFwAAAAAgIYTcgEAAAAAGk7IBQAAWMuOPPLIbLvtttlll12ede60005LKSUPPvhgkuTrX/96pk2blv7+/sycOTPXXHPNirV33313Xv/612fKlCl51atelaGhoW59BACgYToackspJ5RSFpZSainlpvbPj0sp09vnX1JK+Vkp5cZSyi9KKf+rk/MAAAB0w+GHH55vf/vbzzq+aNGiXHXVVZkwYcKKY7NmzcqNN96YwcHBXHDBBTn66KNXnDvssMPyvve9LwsXLszPfvazbLvttl2ZHwBonk5fkfvOJPsneU2S19VapyX5cJLz2+efSPI3tdbpSfqT7FdK+R8dngkAAKCjXvva12arrbZ61vGTTjopp556akopK45tttlmK35funTpise33nprhoeHs88++6xYt8kmm3RhegCgiToWcksp5yWZlGR+kj1qrYvbp65NskOS1BFL2sfHtH9qp2YCAADolfnz52f77bfP9OnTn3Xua1/7WnbeeefMnj07F1xwQZLkjjvuyJZbbpm//du/zYwZM/K+970vy5cv7/bYAEBDdCzk1lqPTXJvkr1rrWesdOqoJN96+pdSyqhSymCS+5NcVWv9aadmAgAA6IXHHnssH/3oR/OhD31otecPOuig3Hbbbbn88svzL//yL0mS4eHh/PCHP8xpp52Wn//857nrrrvy+c9/votTAwBNMrqbb1ZK2TsjIXevp4/VWpcn6S+lbJnka6WUXWqtt6zmucckOSZJxo3bJnP7hrs0NbAh2m7jZI59Bugwew2sn1qtVpLkv//7v7N06dK0Wq3cddddueOOOzJ58uQkyQMPPJCpU6fm3HPPfdYtGH7xi1/k61//eu6///684hWvyN1335277747kydPzje+8Y3suOOOf9Q8S5YsWTETQKfYa6DzSq2du5NBKWUo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AACg4YRcAAAAAICGE3IBAAAAABpOyAUAAAAAaDghFwAAAACg4YRcAAAAAICGE3IBAAAAABpOyAUAAAAAaDghFwAAAACg4YRcAAAAAICGE3IBAAAAABpOyAUAAAAAaDghFwAAAACg4YRcAAAAAICGE3IBAAAAABpOyAUAAAAAaDghFwAAAACg4YRcAAAAAICGE3IBAAAAABpOyAUAAAAAaLjRvR5gTTz+5PJMPPmKXo8BdNDQvNm9HgEAAACgMVyRCwAAAADQcEIuAAAAAEDDCbkAAAAAAA0n5AIAAAAANJyQCzTe8uXLM2PGjLzxjW9c5fjxxx+fzTbbbMXv5513Xvr6+tLf35+99tort956a7dHBQAAAOiInoTcUsoJpZSFpZRaSrmp/fPjUsr0XswDNNtZZ52VKVOmrHJswYIFefjhh1c59ra3vS0333xzBgcH8/73vz/vec97ujkmAAAAQMf06orcdybZP8lrkryu1jotyYeTnN+jeYCGuueee3LFFVfk6KOPXnFs+fLled/73pdTTz11lbVbbLHFisdLly5NKaVrcwIAAAB00uhuv2Ep5bwkk5LMT3JBrfXH7VPXJtmh2/MAzfbud787p556ah599NEVx84+++wceOCBGT9+/LPWn3POOfnEJz6RZcuW5Qc/+EE3RwUAAADomK5fkVtrPTbJvUn2rrWesdKpo5J8q9vzAM31zW9+M9tuu2122223FcfuvffeXHLJJTn++ONX+5x3vetdufPOO/Nv//Zv+chHPtKtUQEAAAA6qtRau/+mpQwlmVlrfbD9+95JPpVkr1rrQ8/xnGOSHJMk48Zts9vcMz/TpWmBXujb/s/zmc98Jt/97nczatSoLFu2LI899ljGjBmTMWPGZOzYsUmS+++/P+PHj89FF120yvOfeuqpHHjggfnmN7+5Ru+/ZMmSVb5IDaAT7DVAN9hrgG6w18Ca23vvva+rtc58oXVdv7XCM5VSpiX59yRveK6ImyS11vPTvofuhEk71dNv7vnoQAcNHTKQgYGBFb+3Wq2cdtppzwqzm222WX77298mSX75y1/mla98ZZLkG9/4RnbeeedVXuOP0Wq11vi5AC+WvQboBnsN0A32Gui8ntbQUsqEJJcleXut9Y5ezgKs+84+++x873vfy5gxY/LSl740X/jCF3o9EgAAAMBa0evLWucm2TrJ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\n",
      "text/plain": [
       "<Figure size 1728x1728 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "MAX_ROUNDS=250 # Just neat the rounds it stopped i.e 180\n",
    "early_stopping_rounds=100\n",
    "params = {\n",
    "    'booster': 'gbtree',\n",
    "    'objective': 'multi:softprob',\n",
    "    'eval_metric': 'mlogloss',\n",
    "    'learning_rate': 0.06,\n",
    "    'num_round': MAX_ROUNDS,\n",
    "    'max_depth': 8,\n",
    "    'seed': 13,\n",
    "    'nthread': -1,\n",
    "    \"num_class\": 5,\n",
    "}\n",
    "\n",
    "dtrain = xgb.DMatrix(train[feat], label=train[target])\n",
    "watchlist = [(dtrain, 'train')]\n",
    "\n",
    "model = xgb.train(\n",
    "    params,\n",
    "    dtrain,\n",
    "    evals=watchlist,\n",
    "    num_boost_round=MAX_ROUNDS,\n",
    "    early_stopping_rounds=early_stopping_rounds,\n",
    "    verbose_eval=50\n",
    ")\n",
    "print(\"Best Iteration :: \", model.best_iteration)\n",
    "\n",
    "# Plotting Importances\n",
    "fig, ax = plt.subplots(figsize=(24, 24))\n",
    "xgb.plot_importance(model, height=0.4, ax=ax)\n",
    "xgb_preds = model.predict(xgb.DMatrix(test[feat]), ntree_limit=model.best_ntree_limit)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Submission"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.000086</td>\n",
       "      <td>0.000226</td>\n",
       "      <td>0.999484</td>\n",
       "      <td>0.000091</td>\n",
       "      <td>0.000113</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.000186</td>\n",
       "      <td>0.014087</td>\n",
       "      <td>0.003089</td>\n",
       "      <td>0.982405</td>\n",
       "      <td>0.000233</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1         2         3         4\n",
       "0  0.000086  0.000226  0.999484  0.000091  0.000113\n",
       "1  0.000186  0.014087  0.003089  0.982405  0.000233"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sub = pd.DataFrame(xgb_preds)\n",
    "sub.to_excel(\"../subs/best_private.xlsx\", index=False)\n",
    "\n",
    "sub.head(2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# END"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
